力扣242(java)-有效的字母异位词(简单)

题目:

给定两个字符串 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 字符怎么办?你能否调整你的解法来应对这种情况?

来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

一、哈希映射【数组】

1.先判断两个字符串的长度是否相等,不相等直接返回false;

2.如果相等,则创建一个长度为26的频次数组count,来计算每个字符出现的次数,先遍历s中字符出现的次数,在遍历 t 减去count中对应字符出现的次数,如果数组的值都为0,则说明两个字符串互为字母异位词。

 代码:

 1 class Solution {
 2     public boolean isAnagram(String s, String t) {
 3         if(s.length() != t.length()){
 4             return false;
 5         }
 6         int[] count = new int[26];
 7         for(int i = 0; i < s.length(); i++){
 8             count[s.charAt(i) - 'a']++;
 9         }
10         for(int i = 0; i< t.length(); i++){
11             count[t.charAt(i) - 'a']--;
12         }
13         for(int i = 0; i < count.length; i++){
14             if(count[i] != 0){
15                 return false;
16             }
17         }
18     return true;
19     }
20 }

 二、排序

先判断两个字符串长度是否相等,不相等直接返回false,再将两个字符串转换为字符数组,对两个字符串进行排序,再对两个字符串进行判断是否相等,相等则互为字母异位词

代码:

 1 class Solution {
 2     public boolean isAnagram(String s, String t) {
 3         if(s.length() != t.length()){
 4             return false;
 5         }
 6         char[] str1 = s.toCharArray();
 7         char[] str2 = t.toCharArray();
 8         Arrays.sort(str1);
 9         Arrays.sort(str2);
10         return Arrays.equals(str1, str2);
11     }
12 }

进阶版:

看的官方的解答,小白我还想不到这个,不明白进阶的意思😅

 对于进阶问题,Unicode 是为了解决传统字符编码的局限性而产生的方案,它为每个语言中的字符规定了一个唯一的二进制编码。而 Unicode 中可能存在一个字符对应多个字节的问题,为了让计算机知道多少字节表示一个字符,面向传输的编码方式的UTF−8 和UTF−16 也随之诞生逐渐广泛使用,具体相关的知识读者可以继续查阅相关资料拓展视野,这里不再展开。

回到本题,进阶问题的核心点在于「字符是离散未知的」,因此我们用哈希表维护对应字符的频次即可。同时读者需要注意 Unicode 一个字符可能对应多个字节的问题,不同语言对于字符串读取处理的方式是不同的。

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/valid-anagram/solution/you-xiao-de-zi-mu-yi-wei-ci-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 小知识:

使用Arrays.equals(str1, str2)方法,比较两个数组元素是否相等

注意:如果两个数组元素值一样,但是两个数组对应位置元素不同,Arrays.equals返回结果是false。

posted on 2022-05-13 11:16  我不想一直当菜鸟  阅读(67)  评论(0编辑  收藏  举报