列表

详情


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

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

如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 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

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool areAlmostEqual(string s1, string s2) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2021-06-15 15:49:15

func areAlmostEqual(s1 string, s2 string) bool {
    n := len(s1)
    var diff []int
    for i := 0; i < n; i++ {
        if s1[i] != s2[i] {
            diff = append(diff, i)
        }
    }

    k := len(diff)

    if k > 2 || k == 1 {
        return false
    }

    if k == 2 {
        return s1[diff[0]] == s2[diff[1]] && s1[diff[1]] == s2[diff[0]]
    }

    return true
}

上一题