目录
题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
思路
从另一个角度考虑,t 是 s 的异位词等价于「两个字符串中字符出现的种类和次数均相等」。由于字符串只包含 26个小写字母,因此我们可以维护一个长度为 26的频次数组 table,先遍历记录字符串 s 中字符出现的频次,然后遍历字符串 t,减去 table 中对应的频次,如果出现 table[i]<0,则说明 t包含一个不在 s 中的额外字符,返回 false 即可。
题解
class Solution{
public boolean isSucc(String s,String t){
// char []ss=s.toCharArray();
char []tt=t.toCharArray();
int[] arr=new int[26];
for(int i=0;i<s.length();i++){arr[s.charAt(i)-'a']++;}
for(int i=0;i<t.length();i++){arr[tt[i]-'a']--;}
for(int i=0;i<arr.length;i++){if(arr[i]!=0){return false;}}
return true;
}
}
执行用时:3 ms, 在所有 Java 提交中击败了74.05%的用户
内存消耗:38 MB, 在所有 Java 提交中击败了98.48%的用户
通过测试用例:36 / 36
-
时间复杂度:O(n),其中 n为 s的长度。
-
空间复杂度:O(S),其中 S 为字符集大小,此处 S=26。