String Compression(C++压缩字符串)
程序员文章站
2022-03-12 19:45:35
...
解题思路:
(1)既然要使用原地算法,那么这里设置三个指针i,start,end
(2)i表示当前字符串的位置,start表示目标字符串的末尾,end用来判断连续相等字符的迭代
class Solution {
public:
int compress(vector<char>& chars) {
int i=0,start=0,end,count;
string str;
while(i<chars.size()) {
if(i+1<chars.size()) {
if(chars[i]!=chars[i+1]) {
chars[start]=chars[i];
i++;
start++;
}
else {
chars[start]=chars[i];
end = i+1;
count = 1;
while(end<chars.size()&&chars[i]==chars[end]) {
end++;
count++;
}
str = to_string(count);
for(auto&& c:str) chars[++start]=c;
i=end;
start++;
}
} else {
chars[start]=chars[i];
i++;
start++;
}
}
//chars.erase(chars.begin()+start,chars.end());
//return chars.size()
return start;
}
};
(3)LintCode
class Solution {
public:
/**
* @param originalString: a string
* @return: a compressed string
*/
string compress(string &chars) {
int i=0,end,count;
string str="";
while(i<chars.length()) {
if(i+1<chars.length()) {
if(chars[i]!=chars[i+1]) {
str = str + chars[i];
str = str + '1';
i++;
}
else {
str = str + chars[i];
end = i+1;
count = 1;
while(end<chars.length()&&chars[i]==chars[end]) {
end++;
count++;
}
str = str + to_string(count);
i=end;
}
} else {
str = str + chars[i];
if(i!=chars.length()-1) str = str + '1';
i++;
}
}
return str.length()<chars.length()?str:chars;
}
};
推荐阅读
-
C++中string和字符串之间的相互转换
-
C++ string类和字符串的访问和拼接操作
-
C++自定义String字符串类,支持子串搜索
-
c++编写递归函数char *itostr (int n,char *string),该函数将整数n转换为十进制表示的字符串。
-
【C++ 语言】C++字符串 ( string 类 | 创建方法 | 控制台输出 | 字符串操作 | 栈内存字符串对象 | string* )
-
C++整型int转字符串string
-
PAT1078 字符串压缩与解压 (c++实现)—乙级真题(博&人&)
-
PAT_甲级_1050 String Subtraction (20分) (C++)【签到题/二分查找/字符串处理】
-
C++常用的string字符串截断函数
-
C++ 剑指 Offer 左旋转字符串【String】简单