验证s里面的字符是否被随机打乱构成了t。
- java
1)利用hashmap来实现,使用循环实现会超时。
key:是字符,value是字符的个数,遍历s中的字符,在t中找到一个字符,该字符对应的个数减一,直到个数为零,将该字符删除。
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length())
return false;
Map<Character,Integer> map=new HashMap();
//用hashmap存储t字符串中的字符,及它出现的次数
for(int i=0;i<t.length();i++){
char c=t.charAt(i);
if(map.get(c)==null)
map.put(c,1);
else
map.put(c,map.get(c)+1);
}
for(int i=0;i<s.length();i++){
Character key=s.charAt(i);
Integer value=map.get(key);
//如果没有这个key值
if(!map.containsKey(key))
return false;
//如果当前key值的value已经是0,说明该字符已经不存在,删除该字符,并返回false
else if(value==0){
map.remove(key);
return false;
}
//其他情况,将该字符的次数减1
else
map.put(key,value-1);
}
return true;
}
}
2)利用排序来实现,将字符串转换成字符数组。
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length())
return false;
char[] sarray=s.toCharArray();
char[] tarray=t.toCharArray();
Arrays.sort(sarray);
Arrays.sort(tarray);
return Arrays.equals(sarray,tarray);
}
}
- javascript
1)利用排序实现
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
if(s.length!==t.length)
return false;
let sarray=new Array();
let tarray=new Array();
for(let i=0;i<s.length;i++){
sarray.push(s.charAt(i));
tarray.push(t.charAt(i));
}
sarray.sort();
tarray.sort();
return sarray.toString()===tarray.toString();
};
2)利用map实现
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
if(s.length!==t.length)
return false;
let map=new Map();
//将t中的字符和个数放到map中
for(let i=0;i<t.length;i++){
let key=t.charAt(i);
if(!map.has(key)){
map.set(key,1);
}else{
map.set(key,map.get(key)+1);
}
}
for(let i=0;i<s.length;i++){
let key=s.charAt(i);
if(!map.has(key))
return false;
else if(map.get(key)===0){
map.delete(key);
return false;
}else{
map.set(key,map.get(key)-1);
}
}
return true;
};