天天看點

01.02. 判定是否互為字元重排 join()

01.02. 判定是否互為字元重排

    • 題目:
    • 知識補充
      • 兩個重排的字元串應該具有相同的字元,但順序不同。你可以讓它們的順序一樣嗎?
        • 代碼
    • 其他方法
      • 第一次想到的方法(最笨的方法)
      • 題解中看到的方法

題目:

給定兩個字元串 s1 和 s2,請編寫一個程式,确定其中一個字元串的字元重新排列後,能否變成另一個字元串。

示例1:

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

示例2:

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

限制

  • 0 <= len(s1) <= 100

  • 0 <= 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;
};