题目
上链接
给你一个字符串,里面有重复的字符,然后你要输出字符串中有哪些字符,每个字符重复了几次。
目的
累加,读取
笔者的目的是联系stack的使用,以下解法属于舍近求远。
流程图
1、读入测试数量
2、定义结构体,字符域和数字域,分别用来存储当前字符和出现的次数
3、输出结果
数据结构
栈
算法
由于使用栈进行存储,所以读入以后先将字符串翻转
然后开始匹配,
如果是新的字符,就压入栈中,如果不是就次数++
代码
#include<iostream>
#include<algorithm>
#include<string>
#include<stack>
const int MAX=(int)1e5;
using namespace std;
int main()
{
int t;
cin >> t;
getchar();
stack<char>s;
while(t--){
string str;
int cnt[MAX]={0};
getline(cin,str);
reverse(str.begin(),str.end());
s.push(str[0]);cnt[0]++;
int j=0;
for(int i=1;i<str.size();i++){
if(str[i]!=s.top()){
s.push(str[i]);
j++;
}
cnt[j]++;
}
if(cnt[j]==0){
j--;
}
while(!s.empty()){
char ch=s.top();
s.pop();
if(cnt[j]!=1){
cout << cnt[j];
}
cout << ch;
j--;
}
cout << endl;
}
system("pause");
return 0;
}