Leetcode 387 字符串中的第一个唯一字符
字符串中的第一个唯一字符(First Unique Character in a String)
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
s = "leetcode"
返回 0
s = "loveleetcode"
返回 2
提示: 你可以假定该字符串只包含小写字母。
int firstUniqChar(char * s){
int sSize = strlen(s);
for (int i = 0; i < sSize; i++){
if (s[i] == '-') continue;
bool isUnique = true;
for(int j =i+1; j<sSize; j++){
if (s[j] == s[i]){
isUnique = false;
s[j] = '-';
}
}
if (isUnique){
return i;
}
}
return -1;
}
这种时间复杂度为O(n^2)
或者
int firstUniqChar(char * s){
int sSize = strlen(s);
for (int i = 0; i < sSize; i++){
bool isUnique = true;
for(int j =0; j<sSize; j++){
if (s[j] == s[i] && i!=j){
isUnique = false;
break;
}
}
if (isUnique){
return i;
}
}
return -1;
}
两种做法基本类似
接下来是我们耳熟能详的空间换时间的时间
int firstUniqChar(char * s){
int sSize = strlen(s);
int count[26] = {0};
for (int i = 0; i < sSize; i++){
if (count[s[i]-'a']>1) continue;
count[s[i]-'a']++;
}
for (int i = 0; i < sSize; i++){
if (count[s[i]-'a'] == 1) return i;
}
return -1;
}
这时候的时间复杂度就变成了 O(n)