0 题目来源

力扣《程序员面试金典》

1 涉及到的知识点

字符串、
int到string的转换:

  • C++11中string库有内置函数**to_string()**,功能为将指定的数字转化为string字符串,如下:

函数:

  1. #include<string>
  2. string to_string (int val);
  3. string to_string (long val);
  4. string to_string (long long val);
  5. string to_string (unsigned val);
  6. string to_string (unsigned long val);
  7. string to_string (unsigned long long val);
  8. string to_string (float val);
  9. string to_string (double val);
  10. string to_string (long double val);

示例:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string pi = "pi is " + to_string(3.141592);
  7. cout << pi;
  8. }
  9. //输出
  10. //pi is 3.141592
  • 由于一些竞赛不允许使用C++11中的函数,因此可以采用如下方式,自定义to_string函数,实现int到string的转换,其中stringstream是位于sstream库中的字符串流:

    1. #include <iostream>
    2. #include <sstream>
    3. using namespace std;
    4. string to_string(int num)
    5. {
    6. stringstream ss;//定义一个ss流
    7. string temp;
    8. ss<<num;//将数字传递到ss流
    9. ss>>temp;//将转换结果传到string
    10. return temp;
    11. }
    12. int main()
    13. {
    14. string pi = "pi is " + to_string(3234524);
    15. cout<<pi;
    16. }

    2 题目描述

    字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

    3 样例

    示例1:
    输入:”aabcccccaaa”
    输出:”a2b1c5a3”
    示例2:
    输入:”abbccd”
    输出:”abbccd”
    解释:”abbccd”压缩后为”a1b2c2d1”,比原字符串长度更长。

    4 提示

    字符串长度在[0, 50000]范围内。

    5 思路

    本题较为简单,主要思路为对给定字符串进行遍历,当遇到新字符时,记录新字符,重新开始计数,并把之前所记录的数字和字符加入到新字符串中。在此过程中对新字符串和旧字符串的长度进行比较判断,然后返回指定的字符串。

    6 代码

    1. class Solution {
    2. public:
    3. string compressString(string S) {
    4. string news;
    5. char ch=S[0];
    6. int tempcnt=1;
    7. news+=ch;
    8. for(int i=1;i<S.size();i++)
    9. {
    10. if(S[i]==ch)
    11. tempcnt++;
    12. else
    13. {
    14. news+=to_string(tempcnt);
    15. ch=S[i];
    16. news+=ch;
    17. tempcnt=1;
    18. }
    19. if(news.size()>=S.size())
    20. return S;
    21. }
    22. news+=to_string(tempcnt);
    23. if(news.size()>=S.size())
    24. return S;
    25. else
    26. return news;
    27. }
    28. };