前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >646. 第一个独特字符位置

646. 第一个独特字符位置

作者头像
和蔼的zhxing
发布2018-09-04 13:18:25
4110
发布2018-09-04 13:18:25
举报
文章被收录于专栏:和蔼的张星的图像处理专栏

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

代码语言:javascript
复制
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的迭代器。这种的复杂度并不比上面想的那个要小,所以也不写了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.11.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档