【算法训练】LeetCode#242 有效的字母异位词

一、描述

242. 有效的字母异位词

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

注意:*s**t* 中每个字符出现的次数都相同,则称 *s**t* 互为字母异位词。

示例 1:

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

示例 2:

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

二、思路

这道题与之前的两个数组的交集Ⅱ很像,可以用同样的方法做。

如果不用hashmap,可以有其他好的方法。

  • v2:根据题意可知,异位词其实等价于两个单词排序后完全相同。

三、解题


public class LeetCode242 {
    public static boolean isAnagram(String s, String t) {
        if (s.length() != t.length()){
            return false; // 长度不同一定false
        }
        HashMap<Character,Integer> map = new HashMap<>();
        char[] s1 = s.toCharArray();
        char[] s2 = t.toCharArray();
        for (char c : s1){
            if (map.containsKey(c)){
                map.put(c,map.get(c)+1);
            } else {
                map.put(c,1);
            }
        }
        for (char c : s2){
            if (map.containsKey(c)){
                map.put(c,map.get(c)-1);
            } else {
                return false;
            }
        }
        for (int v : map.values()){
            if (v != 0){
                return false;
            }
        }
        return true;
    }
    
	public static boolean isAnagramV2(String s, String t) {
        if (s.length() != t.length()){
            return false; // 长度不同一定false
        }
        int n = s.length();
        char[] s1 = s.toCharArray();
        char[] s2 = t.toCharArray();
        Arrays.sort(s1);
        Arrays.sort(s2);
        for (int i = 0 ; i < n ; i++){
            if (s1[i] != s2[i]){
                return false;
            }
        }
        return true;
    }
    
    public static void main(String[] args) {
        String s1 = "rat";
        String s2 = "car";
        System.out.println(isAnagram(s1,s2));
    }
}
posted @ 2023-02-08 14:03  小拳头呀  阅读(5)  评论(0编辑  收藏  举报