【题目描述】
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。
【输入】
一个字符串,长度小于100000。
【输出】
输出第一个仅出现一次的字符,若没有则输出no。
【输入样例】
abcabd
【输出样例】
c
【源代码】
#include <iostream>
using namespace std;
char str[100000] = {}; // 储存字符串;
bool f_1[26] = {}; // 字符存在性;
bool f_2[26] = {}; // 字符存在的唯一性;
int main()
{
cin >> str;
int length = strlen(str);
for (int i = 0; i < length; i++)
{
// str[i] - 'a':如'a' - 'a' = 0, 将'a'对应下标变为 0,'b'对应下标为 1,...后面亦是如此;
if (f_1[str[i] - 'a'] == 0) // 当前字符不存在;
{
f_1[str[i] - 'a'] = 1;
f_2[str[i] - 'a'] = 1; // 唯一存在;
}
else if (f_1[str[i] - 'a'] == 1) // 当前字符之前已出现;
{
f_2[str[i] - 'a'] = 0; // 失去唯一性;
}
}
int flag = 0;
for (int i = 0; i < length; i++)
{
if (f_2[str[i] - 'a'] == 1)
{
cout << str[i] << endl;
flag = 1;
break;
}
}
if (flag == 0)
{
cout << "no" << endl;
}
return 0;
}