给定一个字符串
s
,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回-1
。示例 1:
输入: s = "leetcode" 输出: 0示例 2:
输入: s = "loveleetcode" 输出: 2示例 3:
输入: s = "aabb" 输出: -1提示:
1 <= s.length <= 105
s
只包含小写字母
解题思路:创建一个数组(注意大小,如果要是a位于数组第一个位置,只需大于26即可,但如果只要相对26字母表顺序,需大于126(打印字符))记录每一个字母出现的次数,记录过后,再次循环,s[i]- 'a' (图1)/s[i](图二)即为对应的字母在arr处的存储位置,判断是否为一即可
class Solution {
public:
int firstUniqChar(string s) {
int arr[26] = {0};
int i = 0;
for( i = 0;i<s.size();i++)
{
arr[s[i]-'a']++;
}
for(i = 0;i<s.size();i++)
{
if(arr[s[i]-'a']==1)
{
return i;
}
}
return -1;
}
};
class Solution {
public:
int firstUniqChar(string s) {
int i = 0;
int size = s.size();
//只用管相对顺序,不用非得从0开始
int count[256] = {0};
for(i = 0;i<size;i++)
{
count[s[i]]+=1;//每个字母对应的位置++
}
for(i = 0;i<size;i++)
{
if(count[s[i]]==1)
return i;
}
return -1;
}
};