sting类中的find和rfind方法,从给定字符串的第一个字符开始,find是从前往后找,rfind是从后往前找,如果最后找到的位置相同,那这个字符是唯一字符,如果位置不相同,这个字符是重复的。
#include<iostream>
#include<string>
using namespace std;
void find_once_char( string&s ) {
for (size_t i = 0; i < s.size(); i++) {
if (s.find(s[i]) == s.rfind(s[i])) {
cout << s[i] << endl;
break;
}
if (i == s.size() - 1) {
cout << -1 << endl;
}
}
}
int main() {
string s;
while (getline(cin, s)) {
find_once_char(s);
}
return 0;
}
思路2:一个字符串全部转化为ASCII码值可以看做一个都是正整数的整形数组
A:65 B:66 ……
a:97 b:98……
先统计每个字符出现的个数,保存在count数组中,然后从字符串的第一个字符开始,在count数组中找它当时存的值是不是1。
int firstUniqChar(string s) {
int count[256] = { 0 };
for (auto e : s){
count[e]++;
}
for (size_t i = 0; i < s.size(); ++i){
if (count[s[i]] == 1){
return i;
}
}
return -1;
}