xqn2017

导航

443. String Compression

原题:

443. String Compression

解题:

看到题目就想到用map计数,然后将计数的位数计算处理,这里的解法并不满足题目的额外O(1)的要求,并且只是返回了结果array的长度,并未修改原始vector的元素。

代码如下:

class Solution {
public:
	int bitsOfNumber(int n)
	{
		int cnt = 0;
		if (n <= 1) return 0; //若为1,则不增加
		while(n) //统计位数,如12就是2位
		{
			cnt++;
			n /=10;
		}
		return cnt;
	}
	int compress(vector<char>& chars) 
	{
		int size = chars.size();
		int i = 0;
		int sum = 0;
		map <char, int> mapchar;
		map <char, int>::iterator it;
		for(;i < size;i++)
		{
			mapchar[chars[i]]++; //统计各个字符个数
		}
		it = mapchar.begin();
		while(it != mapchar.end())
		{
			if(it->second != 0) //如果有这个字符
			{
				sum += bitsOfNumber(it->second) + 1; //字符本身也占据一个元素位置,所以要加1
			}
			it++;
		}
		return sum;
	}
};

  AC代码如下:

class Solution {
public:
    int compress(vector<char>& chars) {
        int len = chars.size() ;
        if (len < 2)
            return len ;
        int res = 0 ;
        char c = chars[0] ;
        int num = 1 ;
        chars.push_back(' ') ;
        for(int i = 1 ; i < len+1 ; i++){
            if (chars[i] == chars[i-1])
                num++ ;
            if (chars[i] != chars[i-1] ){
                chars[res++] = c ;
                if (num > 1){
                    string s = to_string(num) ;
                    for(int j = 0 ; j < s.size() ; j++){
                        chars[res++] = s[j] ;
                    }
                }
                num = 1 ;
                c = chars[i] ;
            }
        }   
        return res ;
    }
};

  

posted on 2018-03-12 19:39  xqn2017  阅读(145)  评论(0编辑  收藏  举报