题意:返回字符串中第一个不重复(只出现一次)的字符。
比如:lettercode --> l ppensnhheo --> s
思路:
方法1:借用string中find和rfind函数,其中find返回的是从左到右寻找指定字符第一次出现的下标,其次rfind返回的是从左到右寻找指定字符最后一次出现的下标 。如果这两个下标相等,说明该字符在字符串中有且仅有一个。
方法2:将字符串的每个字符当成数组下标放在一个新建数组里面,数组下标就是的是字符的ASCII码值。只要字符出现一次,数组当前位置就加1。再对数组元素进行遍历,只要有==1的,就返回该下标。
方法1代码:
#include<iostream>
#include<string>
using namespace std;
class solution
{
int firstuniqchar(string s)
{
for(int i = 0;i < s.size();i++)
{
if(s.find(s[i]) == s.rfind(s[i]))
{
return i;
}
}
return -1;
}
};
方法2代码:
#include<iostream>
#include<string>
using namespace std;
class solution
{
int count[256] = {0};// 使用字符ASCII码值作为数组下标的数组
int size = s.size() - 1;
for(int i = 0;i <= size;i++)
{
count[s[i]] = count[s[i]] + 1;
}
for(int i = 0;i <= size;i++)
{
if(count[s[i]] == 1)
{
return i;
}
else
return -1;
}
};