387. First Unique Character in a String
用一个freq表建立每个字符和其出现次数的映射,然后按顺序遍历字符串,找到第一个出现次数为1的字符,返回其位置即可,参见代码如下:
注意
1. freq[s.charAt(i) - 'a'] == 1
2. freq数组用256覆盖所有字符
class Solution { public int firstUniqChar(String s) { int[] freq = new int[256]; for(int i = 0; i < s.length(); i++){ freq[s.charAt(i) - 'a']++; } for(int i = 0; i < s.length(); i++){ if( freq[s.charAt(i) - 'a'] == 1) return i; } return -1; } }
383. Ransom Note
同理,用freq表记录magazine的每一个字符在对应索引位置上的数。
第二次遍历用ransomNote遍历此表,如果对应位置上的值小于0,则表示不满足。
class Solution { public boolean canConstruct(String ransomNote, String magazine) { int[] freq = new int[26]; for( int i = 0; i < magazine.length(); i++){ freq[magazine.charAt(i) - 'a']++; } for( int i = 0; i < ransomNote.length(); i++){ if( --freq[ransomNote.charAt(i) - 'a'] < 0 ) return false; } return true; } }