题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
思路:我只能想到O(n^2)时间复杂度的算法
class Solution { public: int FirstNotRepeatingChar(string str) { char ch; int j; for(int i = 0;i<str.length();i++){ ch = str[i]; for(j=0;j<i;j++){ if(ch == str[j]) break; } if(j == i) for(j=i+1;j<str.length();j++){ if(ch == str[j]) break; } if(j == str.length()) return i; } return -1; } };
class Solution { public char firstUniqChar(String s) { if(s.length()==0) return ' '; HashMap<Character,Integer> mp = new LinkedHashMap<>(); int value; for(int i = 0; i < s.length(); i++){ if(mp.get(s.charAt(i))==null) mp.put(s.charAt(i),1); else{ value = mp.get(s.charAt(i)); mp.put(s.charAt(i),++value); } } for(Character ch:mp.keySet()){ value = mp.get(ch); if(value == 1) return ch; } return ' '; } }
利用map实现时间复杂度为O(n)
class Solution { public: char firstUniqChar(string s) { unordered_map<char,int> mp; for(int i=0;i<s.length();i++){ mp.insert(make_pair(s[i],0)); } for(int i=0;i<s.length();i++){ mp[s[i]]++; } for(int i=0;i<s.length();i++){ if(mp[s[i]] == 1) return s[i]; } return ' '; } };