Valid Anagram
Given two strings s and t, write a function to determine if t is an anagram of s.
For example, s = “anagram”, t = “nagaram”, return true. s = “rat”, t = “car”, return false.
Note:
You may assume the string contains only lowercase alphabets.
method 1
利用小写字母只有26个,统计s字符串中每个字母的个数,再与t中的字母相比较,判断最后s与t是否相等
public class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()){
return false;
}
int[] abcs =new int[26];
for (int i = 0; i < s.length(); i++) {
abcs[s.charAt(i)-'a']++;
}
for (int i = 0; i < t.length(); i++) {
--abcs[t.charAt(i)-'a'];
}
for (int i = 0; i < abcs.length; i++) {
if(abcs[i]!=0){
return false;
}
}
return true;
}
}
method 2
对字符串s与t进行排序,排完序后,判断字符串s与t是否相等
class Solution {
public boolean isAnagram(String s, String t) {
char[] sChar = s.toCharArray();
char[] tChar = t.toCharArray();
Arrays.sort(sChar);
Arrays.sort(tChar);
return Arrays.equals(sChar, tChar);
}
}
method 3
超时,但是最容易想出,判断s中的每个字符是否在t中能找到,核心定义一个数组tts大小等于t,若s中的某个元素与t的某个位置上的元素相等,则将tts对应该位置的元素置为1,判断该数组是否每一位都等于1,若是,则满足条件
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()){
return false;
}
int[] tts = new int[s.length()];
for (int i = 0; i < s.length(); i++) {
for (int j = 0; j < t.length(); j++) {
if(tts[j]==0&&(s.charAt(i)==t.charAt(j))){
tts[j]=1;
break;
}
}
}
int sumn=0;
for (int i = 0; i < tts.length; i++) {
if(tts[i]==1){
sumn++;
}
}
if(sumn>=s.length()){
return true;
}
return false;
}