题目描述
链接
题意有点迷,就是字符串是:[数字1][数字1的个数][数字2][数字2的个数]组成
分析
- 写的时候写了半天,关键是边界没处理好!!其实可以手动模拟下
to_string(val)
将数值转字符串- 其实不用cnt记录个数,直接循环找j的位置,作减法就好
- 能不写while就不写,写for多好,然后就是另一种写法真的优雅
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
int m;
cin>>s>>m;
m--;
while(m--){
int len = s.length();
string t;
int cnt = 0;
for(int i=0;i<len;i++){
t += s[i];
cnt++;
for(int j=i+1; j<len; j++){
if(s[i] != s[j]){
i = j-1;
break;
}
cnt++;
if(j+1 == len){
i = j;
break;
}
}
t += to_string(cnt);
cnt = 0;
}
s = t;
}
cout<<s<<endl;
}
更好的写法
#include <iostream>
using namespace std;
int main() {
string s;
int n, j;
cin >> s >> n;
for (int cnt = 1; cnt < n; cnt++) {
string t;
for (int i = 0; i < s.length(); i = j) {
for (j = i; j < s.length() && s[j] == s[i]; j++);
t += s[i] + to_string(j - i);
}
s = t;
}
cout << s;
return 0;
}