美文网首页lintcode
646. 第一个独特字符位置

646. 第一个独特字符位置

作者: 和蔼的zhxing | 来源:发表于2017-11-20 23:09 被阅读17次

    给出一个字符串。找到字符串中第一个不重复的字符然后返回它的下标。如果不存在这样的字符,返回 -1。
    样例
    给出字符串 s = "lintcode",返回 0。
    给出字符串 s = "lovelintcode",返回 2。
    1.最容易想到的一个思路,双层遍历,对于每一个字符,遍历整个字符串,如果能找到相同的(且不能是当前字符串),则不合要求,直接跳出内层循环检查下一个,只要找到第一个单独的,没有重复的,则可以返回索引,要注意一种情况是不存在这样的字符怎么呢,那就是遍历了所有的字符都没有找到这样一个字符,我们同样返回-1.

    int firstUniqChar(string &s) {
           if(s.empty())
           return -1;
          int num=0;
           for(size_t i=0;i<s.size();i++)   //对每个字符都遍历所有字符
           {
               for(size_t j=0;j<s.size();j++)   
               {
                   if(s[j]==s[i]&&i!=j) 
                   //如果有相等的,而且不是本字符,那么说明有相同的,考察下一个字符
                   {   num++;
                       break;
                       
                   }
                   if(j==s.size()-1)   //遍历到最后一个也没有找到,那说明这个就是符合要求的,返回
                   {return i;
                   }
               }
           }
           if(num=s.size())   //如果字母都找过了也没有,则返回-1
             return -1;
            // write your code here
        }
    

    2.另一种思路一开始想的是可以把每个字符放在一个哈希表中,但这个要求hash_map是按照插入顺序的,但是c++STL中给出的无序版本的map也并非是按照插入的顺序来的,所以这种方法用hash_map是不好做了,当然我可以用vector<pair<char,int>>来做,find函数,正好可以返回vector的迭代器。这种的复杂度并不比上面想的那个要小,所以也不写了。

    相关文章

      网友评论

        本文标题:646. 第一个独特字符位置

        本文链接:https://www.haomeiwen.com/subject/knvbvxtx.html