第一个只出现一次的字符
在一个字符串(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 };