CodingInterview-第一个只出现一次的字符

具体思路比较简单,首先声明一个长度为 128(容纳 char 类型)的 int 数组,数组中数字如果是-1,说明还没找到,如果是-2,说明出现已经超过一次,如果大于 0,则标识找到的位置。所以只要循环输入字符串一遍,再循环 freq 数组两遍(第一遍初始化,第二遍寻找第一个只出现一次的元素)即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
int FirstNotRepeatingChar(string str) {
if(str.size()==0) return -1;
int freqArray[128];
for(int i=0;i<128;i++) freqArray[i]=-1;
for(int i=0;i<str.size();i++){
int pos=(int)(str[i]);
if(freqArray[pos]==-2) continue;
else if(freqArray[pos]==-1) freqArray[pos]=i;
else if(freqArray[pos]>=0) freqArray[pos]=-2;
}
int firstPos=str.size();
for(int i=0;i<128;i++){
int pos=freqArray[i];
if(pos<0) continue;
if(pos<firstPos) firstPos=pos;
}
if(firstPos==str.size()) return -1;
else return firstPos;
}
};