• 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()
    }
    

  • 相关阅读:
    Android ViewPager用法小结
    HDU1212 Big Number 【同余定理】
    1051. Pop Sequence (25)
    FFmpeg源码结构图
    oracle访问不同用户的表不添加用户名前缀
    window7开启Administrator账户
    Window下对nodejs多版本管理GNVM
    基于Centos7.5搭建Docker环境
    grep与孪生兄弟egrep差异
    Linux编译步骤概述
  • 原文地址:https://www.cnblogs.com/linjunfu/p/12662137.html
Copyright © 2020-2023  润新知