题目1199:找位置【字符串】
- 题目描述:
-
对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12
输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。
- 输入:
-
输入包括一个由字母和数字组成的字符串,其长度不超过100。
- 输出:
-
可能有多组测试数据,对于每组数据,
按照样例输出的格式将字符出现的位置标出。
- 样例输入:
-
abcaaAB12ab12
- 样例输出:
-
a:0,a:3,a:4,a:9 b:1,b:10 1:7,1:11 2:8,2:12
- 提示:
-
1、下标从0开始。
2、相同的字母在一行表示出其出现过的位置。
解题思路
刚开始不知道怎么设计数据结构、存储方式
先在用的是,先用string存储字符串,从头开始遍历字符串,对于第一个字符,找到后面和它相等的所有字符串的位置,并记录、标记,如果总数大于1则输出。
若第n个字符已经被标记 说明前n-1个字符中有和它相同的字符,且已统计 所以跳过该字符
1 #include<stdio.h> 2 #include<string> 3 #include<string.h> 4 #include<iostream> 5 #include<string> 6 #include<vector> 7 using namespace std; 8 int f[105];//标记数组 9 string str;//当前字符串 10 int main(){ 11 while(getline(cin,str)){ 12 memset(f,0,sizeof(f)); 13 for(int i=0;i<str.size();i++){ 14 if(f[i]==1) continue;//该字符已经统计过 15 vector<int> v; 16 v.push_back(i); 17 for(int j=i+1;j<str.size();j++){ 18 if(str[j]==str[i]){ 19 f[j]=1; 20 v.push_back(j); 21 } 22 } 23 if(v.size()>1){ 24 for(int j=0;j<v.size();j++){ 25 if(j!=0) cout<<","; 26 cout<<str[i]<<":"<<v[j]; 27 } 28 cout<<endl; 29 } 30 } 31 } 32 33 return 0; 34 }