描述
給定一個只包含小寫字母的字符串,請你找到第一個僅出現一次的字符。如果沒有,輸出no。
輸入一個字符串,長度小於100000。輸出輸出第一個僅出現一次的字符,若沒有則輸出no。樣例輸入
abcabd
樣例輸出
c
自己做不出,但得到了兩個別人的答案;
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 char a[100100]; 6 int main(){ 7 int i,j,k=0,l=0; 8 gets(a); 9 l=strlen(a); 10 for(i=0;i<l;i++) 11 { 12 for(j=0;j<l;j++) 13 if(a[i]==a[j]&&i!=j) 14 k=1; 15 if(k==0) {cout<<a[i]; return 0; 16 } 17 k=0; 18 } 19 cout<<"no"; 20 }
上面這個更看得懂!
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int main() 6 { 7 char s[110000],b; 8 int a[27]={0},k,q=0; 9 gets(s); 10 int w=strlen(s); 11 for(int i=0;i<=w-1;++i) 12 {k=s[i]-96; 13 a[k]+=1;} 14 for(int i=0;i<=w-1;++i) 15 {k=s[i]-96; 16 if(a[k]==1) 17 {b=96+k;q=1;cout<<b;break;}} 18 if(q==0) cout<<"no"; 19 return 0; 20 }
這個就看不懂了!最后是我自己的,到現在也沒知道是哪錯了!
1 #include<stdio.h> 2 #include<string.h> 3 int t,i,j,flag,len; 4 char a[200000]; 5 int main() 6 { 7 8 gets(a); 9 len=strlen(a); 10 for(i=0;i<len-1;i++) 11 { 12 flag=1; 13 if(a[i]=='@') continue; //對於相同的,省略; 14 for(j=i+1;j<len;j++) //j=j+1;可以不用循環i之前的字母。 15 if(a[i]==a[j]) 16 { 17 a[j]='@'; //相同字母做標記。 18 flag=0; //不輸出a[i]; 19 } 20 if(flag==1) 21 { 22 putchar(a[i]); 23 break; 24 } 25 } 26 if(i==len-1)printf("no"); 27 return 0; 28 }