zoukankan      html  css  js  c++  java
  • LeetCode --- 字符串系列 --- 判定是否互为字符重排

    判定是否互为字符重排

    题目

    给定两个字符串 s1 和 s2,请编写一个程序

    确定其中一个字符串的字符重新排列后,能否变成另一个字符串。


    示例

    示例 1:
    
    输入: s1 = "abc", s2 = "bca"
    输出: true 
    
    示例 2:
    
    输入: s1 = "abc", s2 = "bad"
    输出: false
    

    来源:力扣(LeetCode)

    链接:https://leetcode-cn.com/problems/check-permutation-lcci/

    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    解题思路

    1、循环 s1 字符串
    2、对 s1 和 s2 进行字符替换,并累计各自的替换次数
    3、若有一次不相等情况,说明存在其中一个字母个数不等
    

    或者

    1、循环 s1 字符串
    2、定义两个相应的对象,存储各个字符出现的次数
    3、最后遍历其中一个对象,对比同个字母出现的次数
    

    或者

    较好力扣题解

    1、将 s1 、 s2 切割成数组
    2、各自排序
    3、再进行拼接
    4、判断转换后的两个字符串相等即满足条件
    

    题解

    let CheckPermutation = function(s1, s2) {
        if (s1.length !== s2.length) return false
    
        for (const w of s1) {
            // 循环 s1 字符串
            let s1Count = 0, s2Count = 0
            // 对 s1 和 s2 进行字符替换,并累计各自的替换次数
            s1 = s1.replace(w, m => {
                s1Count++
                return ''
            })
            s2 = s2.replace(w, m => {
                s2Count++
                return ''
            })
            // 若有一次不相等情况,说明存在其中一个字母个数不等
            if (s1Count !== s2Count) return false
            s1Count = 0
            s2Count = 0
        }
        return true
    }
    

    或者

    let CheckPermutation = function(s1, s2) {
        if (s1.length !== s2.length) return false
    
        let s1Obj = {}, s2Obj = {}
        for (let i = 0; i < s1.length; i++) {
            // 循环 s1 字符串
            // 定义两个相应的对象,存储各个字符出现的次数
            if (!s1Obj[s1[i]]) {
                s1Obj[s1[i]] = 1
            } else {
                s1Obj[s1[i]]++
            }
            if (!s2Obj[s2[i]]) {
                s2Obj[s2[i]] = 1
            } else {
                s2Obj[s2[i]]++
            }        
        }
        // 最后遍历其中一个对象,对比同个字母出现的次数
        for (const key in s1Obj) {
            if (s1Obj[key] !== s2Obj[key]) {
                // 若有不相等的情况,则说明存在同个字母个数不等
                return false
            }
        }
        return true
    }
    

    或者

    较好力扣题解

    let CheckPermutation = function(s1, s2) {
        if (s1.length !== s2.length) return false
        // 将 s1 、 s2 切割成数组
        // 各自排序
        // 再进行拼接
        // 判断转换后的两个字符串相等即满足条件
        return s1.split('').sort().join() === s2.split('').sort().join()
    }
    

  • 相关阅读:
    CodeForces
    [AHOI 2013] 差异
    BZOJ
    [校内训练20_09_15]ABC
    [校内训练20_09_10]ABC
    [校内训练20_09_08]AC
    fastIO
    [校内训练20_06_05]ABC
    [校内训练20_06_04]ABC
    [校内训练20_06_03]ABC
  • 原文地址:https://www.cnblogs.com/linjunfu/p/12662137.html
Copyright © 2011-2022 走看看