力扣242题、383题(有效的字母异位词,赎金信)

242、有效的字母异位词

基本思想:

哈希表

具体实现:

1、定义一个大小为26的数组record

2、record记录字符串s里字符出现的次数

3、需要把字符映射到数组也就是哈希表的索引上

字符a到字符z的ASCII是26个连续的数值

字符a映射到索引0,字符z映射到索引25

遍历s这个字符串时,

将s[i] -'a' 这个索引对应的record+1

4、检查字符串t对应的字符有没有出现在record上

遍历字符串t,

将t[i] - 'a' 这个索引对应的record-1

5、最后如果record的所有元素都是0,则s和t是字母异位词

代码:

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] record = new int[26];
        for (char c : s.toCharArray()){
            record[c - 'a'] += 1;
        }
        for (char c : t.toCharArray()){
            record[c - 'a'] -= 1;
        }
        for (int i : record){
            if (i != 0){
                return false;
            }
        }
        return true;
    }
}

383、赎金信

代码:

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        //记录杂志字符串出现的次数
        int[] arr = new int[26];
        int temp;
        for (int i = 0; i < magazine.length(); i++) {
            temp = magazine.charAt(i) - 'a';
            arr[temp]++;
        }
        for (int i = 0; i < ransomNote.length(); i++) {
            temp = ransomNote.charAt(i) - 'a';
            //对于金信中的每一个字符都在数组中查找
            //找到相应位减一,否则找不到返回false
            if (arr[temp] > 0) {
                arr[temp]--;
            } else {
                return false;
            }
        }
        return true;
    }
}
原文地址:https://www.cnblogs.com/zhaojiayu/p/15407725.html