11/2 上午

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;
    }
}

 

上一篇:LeetCode—赎金信(数组的三种解法)


下一篇:[LeetCode]383. Ransom Note ★