给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram" 输出: true
示例 2:
输入: s = "rat", t = "car" 输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
import java.util.Set;
import java.util.HashSet;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Arrays;
import java.lang.String;
class Solution {
/* 将字符串转换为字符数组之后对数组进行排序
* 这两个数组中的元素必然全部相等
* 执行用时 :15 ms, 在所有 Java 提交中击败了30.98%的用户
* 内存消耗 :41.9 MB, 在所有 Java 提交中击败了26.33%的用户
*/
public static boolean isAnagram0(String s, String t) {
char[] temp1=s.toCharArray();
char[] temp2=t.toCharArray();
Arrays.sort(temp1);
Arrays.sort(temp2);
String stemp=String.copyValueOf(temp1);
String ttemp=String.copyValueOf(temp2);
if(stemp.compareTo(ttemp)==0)
return true;
else
return false;
}
/* 遍历数组记录26个字母中每个字母的出现次数
* 只有两个字串中对应的字符出现次数完全相同才满足条件
* 时间复杂度O(s.length+t.length)
* 空间复杂度O(26)
* 利用一个26位的整数数组记录s中各字母出现的次数
* 根据字符串t,对应消掉出现的字母的次数
* 若最后全部抵消,则返回true,否则返回false
* 执行用时 :7 ms, 在所有 Java 提交中击败了82.40%的用户
* 内存消耗 :40.3 MB, 在所有 Java 提交中击败了48.26%的用户
*/
public static boolean isAnagram1(String s, String t) {
int[] alphabet=new int[26];
for(int i=0;i<s.length();i++) alphabet[s.charAt(i)-'a']++;
for(int i=0;i<t.length();i++) alphabet[t.charAt(i)-'a']--;
for(int i:alphabet) if(i!=0) return false;
return true;
}
public static void main(String[] args) {
String s="anagram";
String t="nagaram";
System.out.println(isAnagram1(s,t));
}
}