Leetcode——242:有效字母的异位词

题目描述

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
输入: s = "anagram", t = "nagaram"
输出: true

解题思路

先看一下代码输出结果

        String str = "abcdefghijklmnopqrstuvwxyz";
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            map.put(str.charAt(i), str.charAt(i) + 0);
        }
        for (Map.Entry<Character, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " -- " + entry.getValue());
        }

a -- 97
b -- 98
c -- 99
d -- 100
e -- 101
f -- 102
g -- 103
h -- 104
i -- 105
j -- 106
k -- 107
l -- 108
m -- 109
n -- 110
o -- 111
p -- 112
q -- 113
r -- 114
s -- 115
t -- 116
u -- 117
v -- 118
w -- 119
x -- 120
y -- 121
z -- 122

可以看出,小写字母a~z转成int类型后是有序的,且任意小写字母int值范围在97~122之间,换言之 任意小写字母-去'a' 后得到的值在 0~25 之间,那么本题也是借用此规则来声明一个长度为26的int数组,遍历 s 和 t 为数组赋值,赋值索引为 s/t。charAt(i),遍历 s 时赋值自增1,遍历 t 时,赋值自减 1 ,最后在遍历一下两遍赋值后的数组,如果数组所有元素为0那么说明输入的两个单词是异位词,否则反之。

参考实现

    public static boolean isAnagram(String s, String t) {
        int[] arr = new int[26];
        for (int i = 0; i < s.length(); i++) {
            //[s.charAt(i) - 'a'] 字符串全是小写字母,
            //所有小写字符减去 ‘a’ 得到的值最大是 25,
            //也就是说需要在这些索引上的valeu 做文章
            arr[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) {
            arr[t.charAt(i) - 'a']--;
        }
        for (int i : arr) {
            if (i != 0) {
                return false;
            }
        }
        return true;
    }

 

posted @ 2024-07-18 06:20  晓枫的春天  阅读(8)  评论(0编辑  收藏  举报