题目
给定一个字符串及其长度,找到其第一个不重复的字符,并返回其索引;若不存在,则返回 -1。
示例:
Input:
8
leetcode
Output:0
Input:
13
sloveleetcdes
Output:2
方法1(待改进)
#include <iostream>
using namespace std;
int main(){
string s;
cout << "请输入一个字符串:";
cin >> s;
int cout[256]={0};
int len = s.length();
//统计每个字符出现的次数
for (int i=0;i<len;i++){
cout[s[i]]+=1;
}
//遍历找到出现一次的字符,并返回索引。否则,返回-1
for(int i=0;i<len;i++){
if(cout[s[i]]==1){
return i;
}
}
return -1;
}
有点问题,有待更新修正
方法2(正解)
#include<iostream>
using namespace std;
int firstUniqChar(char str[], int n)
{
int map[26] = { 0 };
for (int i = 0; i < n; i++){
map[str[i] - 'a']++;
}
for (int i = 0; i < n; i++){
if (map[str[i] - 'a'] == 1){
return i;
}
}
return -1;
}
int main()
{
int n;
char str[500];
cout << "请输入字符串长度: ";
cin >> n;
cout << "请输入字符串: ";
cin >> str;
cout << firstUniqChar(str, n) << endl;
}
正解!
方法3
#include <iostream>
using namespace std;
int main(){
string s;
cout << "请输入一个字符串:";
cin >> s;
int i, j, count = 0;
if(s.size() == 0){
return -1;
}
for (i = 0; i < s.size(); i++)
{
for (j = 0; j < s.size(); j++)
{
cout << s[i] << " ";
cout << s[j] << endl;
if (s[i] == s[j])
{
count++;
}
if(count>1)
break;
}
if (count ==1 )
return i;
count = 0;
}
return 0;
}