剑指offer 第一个只出现一次的字符
题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
思路:
1)哪些字符只出现了一次:哈希表统计每个字符出现的次数。
2)找到第一个出现了一次的字符:从头遍历字符串的字符,判断每一个字符的次数,返回第一个次数为1的字符位置。没有则返回-1
1 class Solution { 2 public: 3 int FirstNotRepeatingChar(string str) { 4 // map<char, int> mp; 5 int hash[256] = {0}; 6 int len = str.length(); 7 for (int i = 0; i < len; i++) { 8 hash[str[i]]++; 9 } 10 for (int i = 0; i < len; i++) { 11 if (hash[str[i]] == 1) 12 return i; 13 } 14 return -1; 15 } 16 };
越努力,越幸运