Given two strings s and t , write a function to determine if t is an anagram of s.
anagram:相同字母异序词
两个字符串s和t,判断t是不是s的同字母异序词
example1:Input: s = "anagram", t = "nagaram" Output: true example2:Input: s = "rat", t = "car" Output: 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?
字符串需要注意:大小写、是否包含unicode字符
方法一:
把s的存入字典中,再t的消去,最后检查字典中是否都为0
_(:з」∠)_这个方法显然是不太好。。。不过还是放上来吧囧
6.61/33.07
其他方法(其他po的):
方法二:
用数组存储,直接++或者--
38/69.44
方法三:
先对字符串进行排序,再比较
38/25.05
/* 方法一
* Runtime: 28 ms, faster than 6.61% of Java online submissions for Valid Anagram.
* Memory Usage: 39.1 MB, less than 33.07% of Java online submissions for Valid Anagram.
*/
class Solution {
public static boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) {return false;}
Map<String, Integer> map = new HashMap<String, Integer>();
int temp = 0;
// 将s字符串的存入map中
for(int i=0;i<s.length();i++) {
String c = s.charAt(i)+"";
if(map.containsKey(c)==false) {
map.put(c,1);
}else {
temp = (int) map.get(c)+1;
map.put(c,temp);
}
}
// 将t字符串一个一个匹配map中的字符,如果遇到没有的 则直接返回false
for(int i=0;i<t.length();i++) {
String c = t.charAt(i)+"";
if(map.containsKey(c)==false) {
return false;
}else {
temp = (int)map.get(c)-1;
map.put(c,temp);
}
}
// 检查map中是否每个key的value都为0
for(Integer v:map.values()) {
if(v!=0) {
return false;
}
}
return true;
}
}
/* 方法二
* Runtime: 6 ms, faster than 38.00% of Java online submissions for Valid Anagram.
* Memory Usage: 38.3 MB, less than 69.44% of Java online submissions for Valid Anagram.
*/
public static boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) {return false;}
//初始化
int[] flag = new int[26];
for(int i=0;i<flag.length;i++) {
flag[i]=0;
}
for(int i=0;i<s.length();i++) {
flag[s.charAt(i)-97]++;
}
for(int i=0;i<t.length();i++) {
flag[t.charAt(i)-97]--;
}
for(int i=0;i<flag.length;i++) {
if(flag[i]!=0) {
return false;
}
}
return true;
}
/* 方法三
* Runtime: 6 ms, faster than 38.00% of Java online submissions for Valid Anagram.
* Memory Usage: 39.4 MB, less than 25.05% of Java online submissions for Valid Anagram.
*/
class Solution {
public static boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) {return false;}
char[] b = s.toCharArray();
Arrays.sort(b);
char[] c = t.toCharArray();
Arrays.sort(c);
return Arrays.equals(b,c);
}
}
借鉴方法地址:https://blog.csdn.net/fly_yr/article/details/49886391