fish-stack / Algo

算法相关的话题
0 stars 0 forks source link

242. 有效的字母异位词 #28

Open bitfishxyz opened 5 years ago

bitfishxyz commented 5 years ago

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

说明: 你可以假设字符串只包含小写字母。

进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

bitfishxyz commented 5 years ago

解析

这里只要统计每个字符串中每个单词出现的频率就行了

bitfishxyz commented 5 years ago

Java

import java.util.*;

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s == null) {
            return t == null;
        }

        Map<Character, Integer> map1 = stringToFre(s);
        Map<Character, Integer> map2 = stringToFre(t);

        // 如果字符串中的元素个数不同,结果肯定是false
        if (map1.size() != map2.size()) {
            return false;
        }

        // 确认每个字符在每个字符串中出现的频率都相同
        for (Character c : map1.keySet()) {
            if (!map1.keySet().contains(c)) {
                return false;
            }
            if (!map1.get(c).equals(map2.get(c))) {
                return false;
            }
        }
        return true;
    }

    /**
     * 统计字符串中每个字母的频率
     * @param s
     * @return
     */
    public Map<Character, Integer> stringToFre(String s){
        Map<Character, Integer> map = new HashMap<>(s.length());
        for (char ele : s.toCharArray()) {
            Integer value = map.get(ele);

            if (value == null){
                map.put(ele, 1);
            } else {
                map.put(ele, value + 1);
            }
        }
        return map;
    }

}