213 字符串压缩

原题网址:https://www.lintcode.com/problem/string-compression/description

描述

设计一种方法,通过给重复字符计数来进行基本的字符串压缩。

例如,字符串 aabcccccaaa 可压缩为 a2b1c5a3 。而如果压缩后的字符数不小于原始的字符数,则返回原始的字符串。

可以假设字符串仅包括a-z的字母。

您在真实的面试中是否遇到过这个题?  

样例

str=aabcccccaaa 返回 a2b1c5a3
str=aabbcc 返回 aabbcc
str=aaaa 返回 a4

标签
字符串处理
 
 
思路:设置一个字符标志,初始为str【0】,计数器为1,result为空串。下标从1开始遍历字符串,如果str【i】等于字符标志,计数器加1;否则将标志字符与计数器转成字符串,连接在result后面。同时,更新标志字符与计数器。
尤其注意尾部字符的处理,在循环外面增加语句块,将最后的字符(重复或者非重复)连接在result后面。
 
AC代码:
class Solution {
public:
    /**
     * @param str: a string
     * @return: a compressed string
     */
    string compress(string &str) {
        // write your code here
    int n=str.size();
    if (n==0)
    {
        return str;
    }
    string result="";
    char ch=str[0];
    int count=1;
    for (int i=1;i<n;i++)
    {
        if (str[i]==ch)
        {
            count++;
        }
        else
        {
            string st;
            int2str(count,st);
            result=result+ch+st;
            ch=str[i];
            count=1;
        }
    }
    //不要忘记遍历到最后一个字符的情况;
    string st;
    int2str(count,st);
    result=result+ch+st;

    if (result.size()>=n)
    {
        return str;
    }
    return result;
    }
    
    void int2str(const int &int_tmp,string &string_tmp)
{
    stringstream s;
    s<<int_tmp;
    string_tmp=s.str();//或者 s>>string_tmp;
}
};

参考:C++中int、string等常见类型转换

https://www.cnblogs.com/gaobw/p/7070622.html

 

猜你喜欢

转载自www.cnblogs.com/Tang-tangt/p/9192306.html
213