描述
找出字符串中第一个只出现一次的字符
数据范围:输入的字符串长度满足 1≤n≤1000
输入描述:
输入一个非空字符串
输出描述:
输出第一个只出现一次的字符,如果不存在输出-1
示例1
输入:
asdfasdfo
复制输出:
o
方法一:暴力破解法
#include<iostream>
#include<string>
using namespace std;
char getFristOneChar1(const string& str) {
int j;
for (int i = 0; i < str.size(); i++) {
for (j = 0; j < str.size(); j++) {
if (j == i) {//排除自己与自己比较
continue;
}
if (str[j] == str[i]) {
break;
}
}
if (j >= str.size())
return str[i];
}
return -1;
}
int main() {
string str;
char res;
while (getline(cin,str))
{
res = getFristOneChar1(str);
if (res == -1) {
cout << -1 << endl;
}
else
cout << res << endl;
}
return 0;
}
方法二:hash函数法
#include<iostream>
#include<string>
using namespace std;
char getFristOneChar2(const string& str) {
int hash[256] = { 0 };
for (int i = 0; i < str.size(); i++) {
hash[str[i]]++;//统计字符次数
}
for (int i = 0; i < str.size(); i++) {
if (hash[str[i]] == 1) {
return str[i];
}
}
return -1;
}
int main() {
string str;
char res;
while (getline(cin,str))
{
res = getFristOneChar2(str);
if (res == -1) {
cout << -1 << endl;
}
else
cout << res << endl;
}
return 0;
}
方法三:string类函数查找法
#include<iostream>
#include<string>
using namespace std;
char getFristOneChar3(const string& str) {
for (int i = 0; i < str.size(); i++) {
int index1 = str.find(str[i]);
int index2 = str.rfind(str[i]);
if (index1 == index2)
return str[i];
}
return -1;
}
int main() {
string str;
char res;
while (getline(cin,str))
{
res = getFristOneChar3(str);
if (res == -1) {
cout << -1 << endl;
}
else
cout << res << endl;
}
return 0;
}