242:有效的字母异位词

问题描述

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

示例

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

说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

思路

原来网易校招面试题是出自这儿。
已经做过了就直接上思路。用hashmap。遍历s,对于每个s中的字符进行计数。
遍历t,对t中的每个字符进行反计数,如果减多了直接返回false。(方法一)

这题由于限定了小写字母,因此可以设置一个容量为26的数组。通过char-'a’的方式确定放到哪里模拟了哈希表,这样能少写点代码。 (方法二)

方法一

Java版

class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()){
            return false;
        }
        Map<Character,Integer> map = new HashMap<>();
        for(int i = 0; i < s.length(); i++){
            if(map.containsKey(s.charAt(i))){
                map.replace(s.charAt(i),map.get(s.charAt(i))+1);
            }else{
                map.put(s.charAt(i),1);
            }
        }
        for(int i = 0; i < t.length(); i++){
            if(!map.containsKey(t.charAt(i))){
                return false;
            }else if(map.get(t.charAt(i)) < 1){
                return false;
            }else{
                map.replace(t.charAt(i),map.get(t.charAt(i))-1);
            }
        }
        return true;
    }
}

方法二

Java版

class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()){
            return false;
        }
        int[] map = new int[26];
        for(int i = 0; i < s.length(); i++){
            map[s.charAt(i)-'a']++;
        }
        for(int i = 0; i < t.length(); i++){
            if(map[t.charAt(i)-'a']<1){
                return false;
            }
            map[t.charAt(i)-'a']--;
        }
        return true;
    }
}

发布了396 篇原创文章 · 获赞 22 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41687289/article/details/104830511