01.02. 判定是否互为字符重排 join()

it2024-07-19  41

01.02. 判定是否互为字符重排

题目:知识补充两个重排的字符串应该具有相同的字符,但顺序不同。你可以让它们的顺序一样吗?代码 其他方法第一次想到的方法(最笨的方法)题解中看到的方法

题目:

给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

示例1:

输入: s1 = "abc", s2 = "bca" 输出: true

示例2:

输入: s1 = "abc", s2 = "bad" 输出: false

限制

0 <= len(s1) <= 1000 <= len(s2) <= 100

知识补充

两个重排的字符串应该具有相同的字符,但顺序不同。你可以让它们的顺序一样吗?

代码

/** * @param {string} s1 * @param {string} s2 * @return {boolean} */ var CheckPermutation = function(s1, s2) { if(s1.length === s2.length){ let tmp1 = [...s1].sort() let tmp2 = [...s2].sort() for(let i =0; i < tmp1.length;i++){ if(tmp1[i] !== tmp2[i]){ return false } } return true } return false //改进 //没必要一个字母一个字母的比较 //这里使用join(),是我没有想到的, //join() 方法用于把数组中的所有元素放入一个字符串。 //元素是通过指定的分隔符进行分隔的。参数是可选的,这里直接转为字符串不需要参数 return s1.split('').sort().join() === s2.split('').sort().join(); };

其他方法

第一次想到的方法(最笨的方法)

本是想借助散列表的思想,但是发现好像使用的并不是很正确。

/** * @param {string} s1 * @param {string} s2 * @return {boolean} */ var CheckPermutation = function(s1, s2) { if(s1.length == s2.length){ let arr1 = new Object; let arr2 = new Object; for(let str of s1){ if(!arr1[str]){ arr1[str] = 1 }else{ arr1[str]++ } } for(let str of s2){ if(!arr2[str]){ arr2[str] = 1 }else{ arr2[str]++ } } for(let str of s2){ if(arr1[str] !== arr2[str] && (arr1[str] !== undefined || arr2[str] !== undefined)){ return false } } return true }else{ return false } };

题解中看到的方法

思想是查找s2中有没有一样字母,没有肯定false,有就删除,然后循环

/** * @param {string} s1 * @param {string} s2 * @return {boolean} */ var CheckPermutation = function(s1, s2) { //长度不对等,肯定不行的 if(s1.length!=s2.length){ return false; } s2 = s2.split(''); //直接循环 for(let s of s1){ if(s2.indexOf(s)==-1){ return false; }else{ s2.splice(s2.indexOf(s),1); } } return true; };
最新回复(0)