给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
输入:s = "loveleetcode"
输出:2
和[LeetCode] #383 赎金信基本思路相同
使用String的API的两种解法(速度较慢)
class Solution { public int firstUniqChar(String s) { for(int i = 0; i < s.length(); i++){ String temp = s.substring(0,i) + s.substring(i+1); int res = temp.indexOf(s.charAt(i)); if(res == -1) return i; } return -1; } } class Solution { public int firstUniqChar(String s) { for (int i = 0; i < s.length(); i++) if (s.indexOf(s.charAt(i)) == s.lastIndexOf(s.charAt(i))) return i; return -1; } }
使用HashMap
class Solution { public int firstUniqChar(String s) { Map<Character, Integer> frequency = new HashMap<Character, Integer>(); for (int i = 0; i < s.length(); ++i) { char ch = s.charAt(i); frequency.put(ch, frequency.getOrDefault(ch, 0) + 1); } for (int i = 0; i < s.length(); ++i) { if (frequency.get(s.charAt(i)) == 1) { return i; } } return -1; } }
使用数组代替HashMap
class Solution { public int firstUniqChar(String s) { int[] arr = new int[26]; int n = s.length(); for (int i = 0; i < n; i++) arr[s.charAt(i)-‘a‘]++ ; for (int i = 0; i < n; i++) if (arr[s.charAt(i)-‘a‘] == 1) return i; return -1; } }
知识点:无
总结:与出现次数相关首先可以考虑使用HashMap