leetcode 242. 有效的字母异位词

186 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

题目描述

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

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

示例 1:

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

示例 2:

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

提示:

1 <= s.length, t.length <= 5 * 104 s 和 t 仅包含小写字母

进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

思考

脑海中第一个冒出的就是map,记录次数.

后来提示中为小写字母,那么可以使用26位字母来实现,速度更快.

进阶的话就要使用map了.

题解

这道题和查找次数为1的元素类似.由于是String类型,因此拆分成char的范围是已知的26位.那么就可以用长度为26的数组来存储每个字母出现的数量.

循环字符串,通过与a的距离来确定在数组中的位置,然后+1.

循环第二个字符串,用相同的方式-1;

最后如果数组的任意位置不是0,返回flase,否则返回true

leetcode 87. 字符串中的第一个唯一字符

public boolean isAnagram(String s, String t) {
        // 1.使用数组存储数量
        int[] nums = new int[26];
        char[] chars = s.toCharArray();
        char[] chars1 = t.toCharArray();
        for(char c : chars) {
            // 对应的位置下+1
            nums[c-'a']++;
        }
        for (char c : chars1) {
            nums[c-'a']--;
        }
        for(int i : nums) {
            if (i != 0) {
                return false;
            }
        }
        return true;
    }

image.png