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

  • 相关阅读:
    The provided URI scheme 'http' is invalid; expected 'https'. Parameter name: via
    WCF传递Stream时,同时传递其它参数的问题
    DotNet NB 学习公众号
    军师旅团营连排班各有多少人
    OAuth 2.0学习
    人生三境界
    Mac OS安装Windows各版本时注意事项(2014年后的Mac机相信会有这些问题)
    C#中winform使用相对路径读取文件的方法
    Sql Server Report Service 的部署问题(Reporting Service 2014為什麼不需要IIS就可以運行)
    Reporting Services报表常用的URL参数
  • 原文地址:https://www.cnblogs.com/linjunfu/p/12662137.html
Copyright © 2011-2022 走看看