class Solution {
public int firstUniqChar(String s) {
if (s.length() == 0) {
return -1;
}
int[] count = new int[256];
for (int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
count[c] += 1;
}
for (int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
if (count[c] == 1) {
return i;
}
}
return -1;
}
}
##Solution1:
当年第一次做这个题的做法
对此题最大的感想是:
1)区分deque(双端队列)和queue(队列);
2)要熟悉queue的基本函数
此题答案如下:
class Solution
{
public:
//Insert one char from stringstream
void Insert(char ch) {
str_temp.push(ch);//队列queue用push把元素压入队列中
Hash_temp[ch]++;
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce() {
while(!str_temp.empty() && Hash_temp[str_temp.front()] >=2) {//队列queue的front()返回首元素
str_temp.pop(); //但不删除,pop()删除首元素,但不返回
} //与front()函数类似,back()函数返回尾元素,亦不删除
if(str_temp.empty())
return '#';
else
return str_temp.front();
}
private:
int Hash_temp[256] = {0};//包含所有字符的简易哈希表
queue<char> str_temp;
};
##Solution2:
20180911日重做,代码简练了不少
class Solution {
public:
int Hash[256] = {0};
string str = "";
//Insert one char from stringstream
void Insert(char ch) {
Hash[(int)ch]++;
str += ch;
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce() {
for (int i = 0; i < str.size(); i++) {
if (Hash[str[i]] == 1)
return str[i];
}
return '#';
}
};