Check if One String Swap Can Make Strings Equal in Java

2025年3月27日 | 阅读 2 分钟

给定两个长度相等的字符串 str1 和 str2。选择字符串中的两个索引,这两个索引可以不相同,交换这两个索引处的字符称为字符串交换。如果,最多可以对其中一个字符串进行一次字符串交换,使两个字符串相等,则返回 true。否则返回 false。

示例 1

输入

String str1 = "bank"

String str2 = "kanb"

输出: true

解释

最简单的“bank”的形成方式是:用 str2 的最后一个字符替换 str1 的第一个字符。

示例 2

输入

String str1 = "attack"

String str2 = "defend"

输出: false

解释

仅进行一次字符串交换不足以使它们相等。

示例 3

输入

String str1 = "kelb"

String str2 = "kelb"

输出: true

解释

由于两个字符串已经相等,无需进行 字符串 交换。

朴素方法

该方法判断是否可以通过最多交换一对字符使两个字符串相等。它通过遍历两个字符串来检测不匹配的字符。如果恰好有一个不匹配,则存储字符;如果存在两个以上的不匹配,或者不匹配的字符无法通过交换使字符串相等,则函数返回 false。为确保交换有效,该过程仅在恰好有两个或零个不匹配时才返回 true。该方法提供了一种有效的解决方案,其时间复杂度为 O(n),其中 n 代表字符串的长度。

实施

文件名: SwapingStrings.java

输出

 
true   

复杂度分析

上述代码的时间复杂度为 O(n),其中 n 是字符串 str1 和 str2 的长度。上述代码的空间复杂度为 O(1)。


下一个话题Java 线程概念