题目:
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串,返回-1。(书上是要求返回字符)
思路:
第一遍扫描保存下每个字符出现的次数,第二遍扫描顺序检查哪个字符出现的次数为1.没有找到合适的返回-1.
由于字符的8位的数据类型,共有256种,所以保存次数的哈希表开一个大小为256的数组即可。字符本身即为键值。
时间复杂度是O(n),空间复杂度是O(1)。
代码:
class Solution { public: int FirstNotRepeatingChar(string str) { if(str.size()<=0) return -1; int times[256]; memset(times,0,sizeof(times)); for(int i=0;i<str.size();++i) times[str[i]]++; for(int i=0;i<str.size();++i) if(times[str[i]]==1) return i; return -1;//没有符号要求的,返回-1 } };