AcWing 772. 只出现一次的字符
原题链接
中等
作者:
时过境迁
,
2020-10-15 20:40:40
,
所有人可见
,
阅读 564
// 数据保证字符串的长度不超过100000
#include <cstdio>
#include <cstring> //用到strlen()函数
#include <iostream>
using namespace std;
char ch[100005];
int flag[26]; //统计26个小写字母出现的个数
bool cnt = false; //是否存在此字符
int main()
{
scanf("%s", ch); //接收字符串,且字符串中不能有空格
int len = (int)strlen(ch); //最好在for循环外面算好,否则直接放在循环判断中,重复计算,效率低下
for(int i = 0; i < len; ++i)
{
flag[ch[i] - 'a']++; //a 放入flag[0], b 放入flag[1], ~~~ z 放入 flag[25]
}
for(int j = 0; j < len; ++j)
{
if(flag[ch[j] - 'a'] == 1)
{
cnt = true;
printf("%c\n", ch[j]);
break; //只需要第一个出现的字符即可
}
}
if(!cnt)
{
printf("no\n");
}
return 0;
}
for(int i = 0; i < len; i)
{
flag[ch[i] - ‘a’]; //a 放入flag[0], b 放入flag[1],
~ z 放入 flag[25]~ z 放入 flag[25]}搞不懂这一步为啥是a 放入flag[0], b 放入flag[1],
char类型在计算机中存储是ASCII码,例如字符’a’的ASCII为97,字符’b’的ASCII为98,以此类推,故’c’-‘a’的结果实际就是99-97的结果。它们作为数组下标是较好的。