Solution1:我的答案
原先在数值转化为字符串那一步犯了点错误,这里贴一个比较好的在C++中字符串和数值相互转化的博客
https://www.cnblogs.com/johngu/p/7878029.html
class Zipper {
public:
string zipString(string iniString) {
// write code here
if(iniString.size() <= 2)
return iniString;
string newString;
int num_dupli = 0, start = 0;
for(int i = 0; i < iniString.size(); ) { //i的增加规则由函数内部确定
num_dupli = 1;
start = i;//记录起点
i++;
while(iniString[i] == iniString[start]) {
num_dupli++;
i++;
}
newString += iniString[start];
newString += to_string(num_dupli); //原先是 '0' + num_dupli
}
if(newString.size() < iniString.size())
return newString;
else
return iniString;
}
};
Solution2:
参考链接:https://www.nowcoder.com/profile/9090099/codeBookDetail?submissionId=12705543
这个思路和上面的差不多,写法更加简练!学习之!
class Zipper {
public:
string zipString(string iniString) {
string str;
int i = 0,j = 0;
while (i < iniString.length()){
while (iniString[i] == iniString[j]) i++;
str += iniString[j];
str += to_string(i-j);
j = i;
}
if (iniString.length() < str.length()) return iniString;
else return str;
}
};