#include<bits/stdc++.h> (万能头文件) 首先声明,此方法是可行的,因为计算机1秒运行10的8次方,而此方法的运算量只有26*10的5次方。
using namespace std;
int n,tot[26]; 定义一个变量来储存char数组s的长度,再定一个tot数组,长度为26,因为字母的只有26种。
char s[100010]; 定义一个char数组
int main(){
scanf("%s",s+1); 输入一个字母,从是s【i+1】开始。
n=strlen(s+1); 从s【s+1】起,到结尾,算长度,因为是char数组,所以用strlen
for(int i=0;i<26;i++){ i为一个数,每个不同的i表示不同的字母。并从a到z循环。
for(int j=1;j<=n;j++){ 此时j为s数组的下标,并一个一个字母的扫描。
if(s[j]==i+‘a’){ 当s【j】这个字符的ASCII码=i这个数字+‘a’(也就是65)时 做判断;
tot[i]++; 此时tot【i】为一个计数器当其满足时,++;
} 若没进入if中,继续循环。
}
}
for(int i=1;i<=n;i++){ 最后重新扫描
if(tot[s[i]-‘a’]==1){ 这里是s【i】-‘a’为一个整体,同时作为tot数组的下标,s【i】-‘a’也就刚好=上面的tot数组的【i】,也就是计数器。当它=1时,也就是是s【i】这个字母,只出现了一次,则输出是s【i】。
cout<<s[i]<<endl; 则输出是s【i】。注:因为是按照顺序进行的,所以不必在乎谁前谁后,谁在前,直接输出,即可。
return 0; 并退出。
}
}
cout<<“no”<<endl; 若从始至终都没能满足条件并进入if中(表示tot【s【i】-‘a’】==0也就是从来都没有一个单独出现的字母),则输出no;
}
输入一段字母,判断其中的只出现一次的字母,若有,则输出在前面的字母,若无,则输出no。
最新推荐文章于 2021-07-27 16:50:00 发布