一、题目
二、测试代码
//方法一 Arrays.sort排序
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length())//两个字符串长度不相等直接返回false
{
return false;
}
char[] ch1=s.toCharArray();//toCharArray()方法将字符串转换为字符数组
char[] ch2=t.toCharArray();
Arrays.sort(ch1);//调用Arrays类的sort()方法对字符串进行排序
Arrays.sort(ch2);
return Arrays.equals(ch1,ch2);//调用Arrays类的equals方法判断字符串是否相等,若相等则返回true,不相等则返回false
}
}
//方法二 哈希映射
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length())//两个字符串长度不相等直接返回false
{
return false;
}
int[] count=new int[26];
for(int i=0;i<s.length();i++)//若字符串s和字符串t长度相等,则遍历字符串s和t
{
count[s.charAt(i)-'a']++;//字符串s映射到count,数量加一
count[t.charAt(i)-'a']--;//字符串t映射到count,数量减一
}
for(int c:count)
{
if(c!=0)//若count中有字符数量不为0则不为异位词返回false,否则返回true
{
return false;
}
}
return true;
}
}
三、运行结果
方法一:
方法二:
四、刷题总结
1、方法一的主要思路:我们首先判断两个字符串长度是否相等,不相等则直接返回 false。利用toCharArray()方法将字符串转换为字符数组,再调用Arrays类的sort()方法对字符串进行排序,最后调用Arrays类的equals方法判断字符串是否相等,若相等则返回true,不相等则返回false。
2、方法二的主要思路:我们首先判断两个字符串长度是否相等,不相等则直接返回 false。若相等,则初始化 26 个字母哈希表,遍历字符串 s 和 t。对于字符串s,将字符串s中的每个字符映射到哈希表上,数值+1;对于字符串t,将字符串t中的每个字符映射到哈希表上,数值-1。若最终哈希表各个字符数量为0,则说明两个字符串为异位词。