题目简介
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.
Follow up:
What if the inputs contain unicode characters? How would you adapt your solution to such case?
自己的解法
public class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length())
rheturn false;
char [] S =s.toCharArray();
char [] T =t.toCharArray();
Arrays.sort(S);
Arrays.sort(T);
String news = new String(S);
String newt = new String(T);
if(news.compareTo(newt)==0)
return true;
else
return false;
}
}
java中的compareto方法,按字典排列顺序对两个字符串进行大小分析没如果当前字符串与参数中指定的字符串完全相同(包括大小写),则返回0;如果当前字符串在字典中的顺序先于(即小于)参数中的字符串,则返回小于0的int整数;否则,返回大于0的int型数。
用法是这样
String S,T;
S.compareTo(T);
还有一个方法是compareToIgnoreCase,顾名思义就是忽略大小写,其它的和compareto方法一样。
Hot解法
public class Solution {
public boolean isAnagram(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;
}
}
Hot解法的思路是先定义一个int型的数组,大小是26,分别遍历两个字符串,在第一次遍历中将出现的字母在对应的数组里增加,在第二次遍历中减少。最后判断数组是不是每个数据都是0,如果不是就返回false,如果是就返回true。但是Hot解法可能字符串包含unicode码就不适用了,只适用于英文字符串。