第一个只出现一次的字符

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

思路1:

利用数组模拟哈希,将字符转化为整数(字符-0) (计算ascii)
将每个字符转换为数字,作为数组的下标,值为出现的次数
第一次遍历统计次数,
第二次遍历判断是否为1,是的话返回

 1 class Solution {
 2 public:
 3     int FirstNotRepeatingChar(string str) {
 4 //        vector<int> vec(300,0);
 5         int len = str.size();
 6         if (len <= 0)
 7             return -1;
 8         vector<int> vec(300,0);
 9         int i;
10         for(i = 0;i < len; i++)
11         {
12             vec[str[i]-0]++;
13         }
14         for(i = 0; i < len; i++)
15         {
16             if (vec[str[i]-0] == 1)
17                 return i;
18         }
19         return -1;
20     }
21 };

第二种:直接用,map容器

 1 class Solution {
 2 public:
 3     int FirstNotRepeatingChar(string str) {
 4         int len = str.size();
 5         if (len <= 0)
 6             return -1;
 7         map<char, int> map1;
 8         int i;
 9         for(i = 0; i< len; i++)
10         {
11             map1[str[i]]++;
12         }
13         for(i = 0; i < len; i++)
14         {
15             if(map1[str[i]] == 1)
16                 return i;
17         }
18         return -1;
19     }
20 };
原文地址:https://www.cnblogs.com/xiaokang01/p/12464702.html