地址:
http://ac.jobdu.com/problem.php?pid=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、相同的字母在一行表示出其出現過的位置。
來源:
2005年華中科技大學計算機保研機試真題
解題思路:
使用標記數組mark[105]記錄出現的第一個字符以及以及和這個字符相同的字符,記爲1。
從第一個出現的字符起,搜索剩餘的字符,看是否有相同的字符,若有,則標記數組記爲1,且依次輸出。
源碼:
#include<stdio.h>
#include<string.h>
int strLen;
int mark[ 105 ];
char str[ 105 ];
int main(){
while( scanf( "%s", str ) != EOF ){
strLen = strlen( str );
for( int i = 0; i < strLen; i ++ ){
mark[ i ] = 0;
}
for( int i = 0; i < strLen; i ++ ){
if( mark[ i ] == 0 ){ //從字符串中找出第一個出現的字符
int count = 1;
for( int j = i + 1; j < strLen; j ++ ){ //從第一個出現的字符起,搜索剩餘的字符,看是否有相同的字符
if( str[ i ] == str[ j ] ){ //出現了1個字符
count++;
mark[ j ] = 1;
if( count == 2 ){
printf( "%c:%d,%c:%d", str[ i ], i, str[ i ], j );
}
else{
printf( ",%c:%d", str[ i ], j );
}
}
}
if( count > 1 ){
printf("\n");
}
}
}
}
}
/**************************************************************
Problem: 1199
User: 螺小旋
Language: C++
Result: Accepted
Time:20 ms
Memory:1020 kb
****************************************************************/