剑指offer 第一个只出现一次的字符

题目描述:
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)

题解:

class Solution 
{
     
public:
    int FirstNotRepeatingChar(string str) 
    {
     
       bitset<128> b1,b2;
        for(auto ch :str)
        {
     
            if(!b1[ch] && !b2[ch])
                b1[ch] = 1;
            else if(b1[ch] && !b2[ch])
            b2[ch] = 1;
        }
    for (int i=0; i<str.size(); ++i) 
    {
     
            if (b1[str[i]] && !b2[str[i]]) 
            {
     
                return i;
            }
        }
        return -1;
    }
};

解题思路:
使用两个bitset<128>
b1代表第一次出现,b2代表第二次及多次出现。
如果b1、b2都为零,说明这个字符没有出现过,b1置1,如果b1已经为1,b2不为1,那么是第二次出现,b2置1。
最后遍历两个数组,找到第一个b1为1,b2为0的数组。

你可能感兴趣的:(剑指offer)