其他分享
首页 > 其他分享> > 35_242. 有效的字母异位词

35_242. 有效的字母异位词

作者:互联网

题目描述:
image
解题思路:

首先是判断两个字符串的长度是否相同,如果不相同直接返回false

  • 排序:
    • 将两个字符串分别排序String.toCharArray,Arrays.sort,排序之后比较两个字符串是否相同Arrays.equals
  • 哈希表1:
    • 维护一个有26个元素的数组,(0--25————a--z)
    • 先遍历字符串s,每次遇到一个字母,就在对应位置上给+1
    • 遍历字符串t,每次遇到一个字母,就在对应位置上-1
    • 如果出现某个位置上的值小于0,则返回false(因为字符串长度相同,如果两个字符串有不同的字母数量,那么此消彼长,一定会出现某个位置小于0)
  • 哈希表2:
    • 遍历字符串s,将遇到的字母加入到hash表中,并更新其次数,如果hash表无该字符串,则次数为1,否则+1
    • 遍历字符串t,若hash表中无此字母,返回false,若有该字母,则次数-1,若count<0,也返回false

代码:

排序
//排序:
class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        char[] str1 = s.toCharArray();
        char[] str2 = t.toCharArray();
        Arrays.sort(str1);
        Arrays.sort(str2);
        return Arrays.equals(str1, str2);
    }
}
哈希表1
//哈希表1
class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        int[] table = new int[26];
        for (int i = 0; i < s.length(); i++) {
            table[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) {
            table[t.charAt(i) - 'a']--;
            if (table[t.charAt(i) - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
}
哈希表2
//哈希表2:
class Solution {
    public boolean isAnagram(String s, String t) {
        HashMap<Character, Integer> mapS = new HashMap<>();
        HashMap<Character, Integer> mapT = new HashMap<>();
        if (s.length() != t.length()) {
            return false;
        }
        int len = s.length();
        for (int i = 0; i < len; i++) {
            if (!mapS.containsKey(s.charAt(i))) {
                mapS.put(s.charAt(i), 1);
            }else{
                mapS.put(s.charAt(i), mapS.get(s.charAt(i)) + 1);
            }
            
        }
        for (int i = 0; i < len; i++) {
            if (mapS.containsKey(t.charAt(i))) {
                mapS.put(t.charAt(i), mapS.get(t.charAt(i)) - 1);
                if (mapS.get(t.charAt(i)) < 0) {
                    return false;
                }
            }else {
                return false;
            }
        }
        return true;
    }
}

标签:false,charAt,异位,35,mapS,length,242,字符串,return
来源: https://www.cnblogs.com/forrestyu/p/16209553.html