Problems
Given a string s, find the first non-repeating character in it and return its index. If it does not exist, return -1.
Solution
遍历,数组统计记录出现次数。
如果数组未记录过,则将其index添加进列表中保存。
遍历列表,如果数组统计结果为1,则返回对应的index。
否则返回-1。
Code 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public int firstUniqChar(String s) { List<Integer> arr = new ArrayList<>(); int[] bin = new int[26]; for(int i = 0; i < s.length(); i++){ if(bin[s.charAt(i) - 'a'] == 0) arr.add(i); bin[s.charAt(i) - 'a']++; } for(int i = 0; i < arr.size(); i++){ if(bin[s.charAt(arr.get(i)) - 'a'] == 1) return arr.get(i); } return -1; } }
|
Solution
遍历,建立哈希表,记录出现次数。
再次遍历,如果出现次数为1,则返回下标。
Code 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution { public int firstUniqChar(String s) { HashMap<Character,Integer> map = new HashMap<Character,Integer>(); for ( int i = 0; i < s.length(); i++ ){ char curChar = s.charAt(i); if ( !map.containsKey(curChar) ){ map.put(curChar, 1); } else{ map.put(curChar, map.get(curChar)+1); } } for ( int i = 0; i < s.length(); i++ ){ char curChar = s.charAt(i); if ( map.get(curChar) == 1 ){ return i; } } return -1; } }
|