sort simple

版权声明:作者:xp_9512 来源:CSDN 版权声明:本文为博主原创文章,转载请附上博文链接! 原文: https://blog.csdn.net/qq_40981804/article/details/91413773

有效字母异位

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

  • 示例

    示例 1:

    输入: s = “anagram”, t = “nagaram”
    输出: true

    示例 2:

    输入: s = “rat”, t = “car”
    输出: false

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

  • 思路

    标签:哈希映射
    1、首先判断两个字符串长度是否相等,不相等则直接返回 false
    2、若相等,则初始化 26 个字母哈希表,遍历字符串 s 和 t
    3、s 负责在对应位置增加,t 负责在对应位置减少
    4、如果哈希表的值都为 0,则二者是字母异位词
  • 代码
class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) return false;
        int[] alpha = new int[26];//用来存储结果
        for (int i = 0; i < s.length(); i++) {
           alpha[s.charAt(i) - 'a']++;
           alpha[t.charAt(i) - 'a']--;            
        }
        for (int i = 0; i < 26; i++) System.out.print(alpha[i]+" - ");
        for (int i = 0; i < 26; i++) if (alpha[i] != 0) return false;
        return true;
    }
    //测试用
    public static void  main(String[] args){
        String a = "aryuib";
        String c = "tryuib";
        String b = "rtuiby";
        Solution solution = new Solution();
        System.out.println(solution.isAnagram(c,b));
    }
}
  • 进阶:
    如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

  • 思路:
    unicode情况下,字符太多了,创建的数组长度要按照unicode的长度来,这显然不合理 改用哈希表动态储存出现过的字符就ok了

  • 代码

    class Solution {
        public boolean isAnagram(String s, String t) {
            if (s.length() != t.length()|| s == null || t == null) {
                return false;
            }
            Map<Character, Integer> map = new HashMap<>();//哈希表存出现过的字符,以及出现次数
            for (int i = 0; i < s.length(); i++) {
                if (!map.containsKey(s.charAt(i))) {
                    map.put(s.charAt(i),1);
                } else {
                    int  integer = map.get(s.charAt(i))+1;
                    map.put(s.charAt(i),integer);
                }
            }
            for (int j = 0; j < t.length(); j++) {
                if (!map.containsKey(t.charAt(j))) {
                    return false;
                } else {
                    int  integer = map.get(t.charAt(j)) -1;
                    if (integer < 0)  return false;
                    map.put(t.charAt(j),integer);
                }
            }
            //遍历HashMap
            Iterator it = map.entrySet().iterator();
            for(Map.Entry<Character, Integer> entry: map.entrySet()){
               if(entry.getValue() != 0) return false;
            }
            return true;
        }
        //测试
        public static void  main(String[] args){
            String a = "aryuib";
            String c = "tryuib";
            String b = "rtuiby";
            Solution solution = new Solution();
            System.out.println(solution.isAnagram(a,b));
        }
    }
    
    

猜你喜欢

转载自blog.csdn.net/qq_40981804/article/details/91413773