LeetCode仅执行一次字符串交换能否使两个字符串相等使用JavaScript解题|前端学算法

简介: LeetCode仅执行一次字符串交换能否使两个字符串相等使用JavaScript解题|前端学算法

仅执行一次字符串交换能否使两个字符串相等


给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。

如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false 。

 

示例 1:

输入:s1 = "bank", s2 = "kanb"

输出:true

解释:例如,交换 s2 中的第一个和最后一个字符可以得到 "bank"

示例 2:

输入:s1 = "attack", s2 = "defend"

输出:false

解释:一次字符串交换无法使两个字符串相等

示例 3:

输入:s1 = "kelb", s2 = "kelb"

输出:true

解释:两个字符串已经相等,所以不需要进行字符串交换

示例 4:

输入:s1 = "abcd", s2 = "dcba"

输出:false


解题思路


根据题目要求,只有一个字符串执行执行最多一次字符交换使得两个字符串相等;那就说明两个字符串一共有两处不相同,我们只需要找出这两处的下标,并判断字符串交换位置后是否相等就行了

具体步骤如下:

  • 第一步: 首先判断两个字符串是否相同;如果相同直接返回true
  • 第二步: 初始化一个数组diff用来存放不相同字符的下标;开始遍历字符串
  • 如果当前位置的元素不相同,就把下标存入数组,当数组的长度大于2时,就说明至少要交换两次,不符合要求,直接返回false
  • 第三步: 判断diff长度,如果不等于2就说明不能交换或者一次无法交换成功
  • 第四步:判断是字符串交换后是否相同,并返回结果
var areAlmostEqual = function(s1, s2) {
    if (s1 === s2) return true;
    const diff = [];
    for (let i = 0; i < s1.length; ++i) {
        if (s1[i] !== s2[i]) {
            diff.push(i);
            if (diff.length > 2) {
                return false;
            }
        }
    }
    if (diff.length !== 2) {
        return false;
    }
    return s1[diff[0]] === s2[diff[1]] && s1[diff[1]] === s2[diff[0]];
};


微信图片_20230108085740.png




目录
相关文章
|
1月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
38 0
|
11天前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
1月前
|
人工智能 自然语言处理 程序员
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
欢迎来到工程师令狐小哥的频道。本文介绍如何利用AI工具高效刷LeetCode,通过通义灵码插件在IntelliJ IDEA中实现代码生成、优化、单元测试等功能,提升编程学习效率。
62 1
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
|
1月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
23 2
|
1月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
66 0
|
1月前
|
算法 C++
【算法解题思想】动态规划+深度优先搜索(C/C++)
【算法解题思想】动态规划+深度优先搜索(C/C++)
|
JavaScript 前端开发 C++
javascript中的执行环境和作用域详解
首先,我们要知道执行环境和作用域是两个完全不同的概念 函数的每次调用都有与之紧密相关的作用域和执行环境;从根本上来说,作用域是基于函数的,而执行环境是基于对象的(例如:全局执行环境即window对象);换句话说,作用域涉及到被调用函数中的变量访问,且不同的调用场景是不一样的;执行环境始终是this.
4448 0
|
JavaScript 前端开发 存储
从头开始学JavaScript (九)——执行环境和作用域
原文:从头开始学JavaScript (九)——执行环境和作用域 一、执行环境:定义了变量或者函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有与之关联的变量对象。 变量对象:保存着环境中定义的变量和函数。
1110 0