646. 第一个独特字符位置

给出一个字符串。找到字符串中第一个不重复的字符然后返回它的下标。如果不存在这样的字符,返回 -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的迭代器。这种的复杂度并不比上面想的那个要小,所以也不写了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏学海无涯

8.数组

8120
来自专栏从流域到海域

Python list(列表)

Python一共有6种序列的内置类型,list和tuple是其中最常见的。6种序列的都可以进行的操作包括索引、切片,加(实际上是连接),乘(实际上是复制)...

27860
来自专栏深度学习之tensorflow实战篇

hive字符串函数

hive字符串函数 1. 字符串长度函数:length 语法: length(string A) 返回值: int 说明:返回字符串A的长度 举例:hive> ...

90070
来自专栏C/C++基础

C++赋值操作符重载简介

赋值操作符是一个使用频率最高的操作之一,通常情况下它的意义十分明确,就是将两个同类型的变量的值从一端(右端)传到另一端(左端)。但在以下两种情况下,需要对赋值操...

11810
来自专栏程序你好

Java中嵌套类用法

在Java中,可以在另一个类中定义一个类。这些类称为嵌套类。它们使您能够对只在一个地方使用的类进行逻辑分组。因此,这增加了封装的使用,并创建了更具可读性和可维护...

16940
来自专栏linux驱动个人学习

动态绑定与静态绑定

为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。 需要理解四个名词: 1、对象的静态类型:...

34030
来自专栏待你如初见

Day11

for(元素的数据类型 变量名 : 数组名或者Collection集合对象名) {

11460
来自专栏java工会

完整的java数组操作应用知识汇总

数组是一种非常有用和常用的数据类型,存在于每种程序语言之中,java中的数组是一种最简单的复合数据类型,刚学习java数组的小白们大多都会听到一句这样的话:ja...

13620
来自专栏Android开发指南

5:面向对象总结

374120
来自专栏咸鱼不闲

String的基本用法

24420

扫码关注云+社区

领取腾讯云代金券