给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram” 输出: true
示例 2:
输入: s = “rat”, t = “car” 输出: false
说明: 你可以假设字符串只包含小写字母。
什么是字母异位词?
指的是两个字符串相同,但字母的顺序不同。
思路1:排序法
先判断这两个字符串的长度是否相等,不等,肯定为false,
长度相等时,使用sort排序后比较,但是题目给定的是字符串因此需要先转换为数组,然后使用sort排序,排序后的是数组,需要在转换为字符串比较是否相等。
注意:字符串和数组之间的转换
var isAnagram = function(s, t) {
//字母异位词指的是:两个字符串包含相同的字母,但是字母的顺序不同,思路是,判两个字符串的长度是否相等,不等则false,转为字符串数组进行sort判断
if(s.length != t.length){
return false;
}
//长度相等判断字母顺序
//先将字符串转化为字符数组然后使用sort方法
let sa=s.split('');
let ta=t.split('');
let sas=sa.sort();
let tas=ta.sort();
return sas.toString()===tas.toString();
};
思路2:使用hash表
hash表用于存放遍历到字母(key)和其出现的次数(value)。
先遍历字符串s,将其出现的字母和出现的次数分别作为key和value装到hash表中。在遍历字符串t,字符串t 中的字母如果出现了,则将hash中对应的位置value值-1,如果hash表中某个位置的 value 值小于 0,表示 t 中出现了一个 s 中没有的字母,直接return false。当t中字母全部遍历完成后,一直么有返回false表示,s与 t 是异位词,返回true。
var isAnagram = function(s, t) {
//hash表的解法:
if(s.length != t.length){
return false;
}
let hash=new Map();
for(let char of s){
if(hash.has(char)){
hash.set(char, hash.get(char)+1);
}else{
hash.set(char,1);
}
}
for(let char of t){
if(hash.has(char) && hash.get(char)>0){
hash.set(char,hash.get(char)-1);
}else{
return false;
}
}
return true;
}