题目描述
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
https://leetcode-cn.com/problems/check-permutation-lcci/
解题思路
有三种方法实现:
- 转为数组然后排序比较字符串
- 利用对象计数比较值结果
- 将字符串转为ASCII码全加比较值
代码实现
/**
* @param {string} s1
* @param {string} s2
* @return {boolean}
*/
//三种方法实现
//1.转为数组然后排序比较字符串// 60 ms 34.1 MB
var CheckPermutation = function(s1, s2) {
let n1=s1.split('').sort().join('');
let n2=s2.split('').sort().join('');
return n1===n2;
};
//2.利用对象计数//60 ms 34 MB
var CheckPermutation = function(s1, s2) {
if(s1.length!==s2.length){
return false;
}
let map={};
for(let i=0;i<s1.length;i++){
map[s1[i]]=(map[s1[i]]||0)+1;
}
for(let i=0;i<s2.length;i++){
if(!map[s2[i]]){
return false;
}else{
map[s2[i]]--;
}
}
return true;
};
//3.将字符串转为ASCII码全加比较值 64 ms 34 MB
var CheckPermutation = function(s1, s2) {
let sum1=0;
let sum2=0;
if(s1.length!==s2.length)return false;
for(let i=0;i<s1.length;i++){
sum1+=s1.charCodeAt(i);
sum2+=s2.charCodeAt(i);
}
return sum1===sum2;
};