【剑指offer】面试题35:第一个只出现一次的字符

题目:

在一个字符串(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
    }
};

 

posted @ 2015-08-13 15:25  不系之舟530  阅读(144)  评论(0编辑  收藏  举报