题目:
实现一个算法来压缩一个字符串。压缩的要求如下:
-
需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。
-
压缩的格式是将连续相同字符替换为字符 + 数字形式,例如 "AAABCCDDDD" 变为 "A3BC2D4"。
题解:
需要将字符串中相同字符叠在一起的部分压缩,也就是数出每一堆连在一起的相同字符的数量。
cpp
#include <iostream>
using namespace std;
int main(){
string s;
string ans;
cin>>s;
if(s.size()==1){
}
for(int i=0;i<s.size();i++){
ans+=s[i];
int k=1;
while(i+1<s.size()&&s[i]==s[i+1]){
k++,i++;
}
ans+=to_string(k);
}
if(ans.size()<s.size())cout<<ans;
else cout<<"NO";
return 0;
}
题后反思:
这道题个人认为和连通块的思想相似:找出每一个联通部分的长度。
cpp中将多位数字转换为字符串的方法:to_string(num)返回转换后的字符串,此方法不需要导入其他的库。