方法一:哈希+两次遍历
时间复杂度O(2n),空间复杂度O(∣Σ∣)
方法二:延迟删除队列
时间复杂度O(N)+O(∣Σ∣)= O(n),空间复杂度O(∣Σ∣)
class Solution {
public:
unordered_map<char,int> alp;
queue<char> que;
char firstUniqChar(string s) {
int size = s.size();
if(size==0) return ' ';
for(int i = 0;i<size;i++){
if(alp.find(s[i])==alp.end()){
alp[s[i]]=1;
que.push(s[i]);
}else{
alp[s[i]]++;
while(alp[que.front()]!=1&&!que.empty()){
que.pop();
}
}
}
return que.empty()?' ':que.front();
}
};
该文介绍两种方法来找到字符串里的第一个唯一字符。方法一是使用哈希表配合两次遍历,时间复杂度为O(2n)。方法二是利用延迟删除队列,时间复杂度优化到O(n)。在C++实现中,使用了unordered_map存储字符频率,queue处理延迟删除。
490

被折叠的 条评论
为什么被折叠?



