.LintCode211——字符串置换★
时间: 2025-06-26 14:06:15 浏览: 22
### LintCode 211 字符串置换解题思路
LintCode 211 的核心问题是判断两个字符串是否可以通过字符位置的调整而互相转换,即 **字符串置换**。此问题通常涉及以下几个方面:
#### 1. 判断条件
要验证两个字符串 `s` 和 `t` 是否可以互换,需满足以下条件之一:
- 如果两字符串长度不同,则直接返回 `false`[^1]。
- 若两字符串完全相同,则需要进一步确认是否存在至少一个重复字符,因为只有存在重复字符的情况下才能完成交换而不改变原字符串。
```python
from collections import Counter
def canConvert(s, t):
if len(s) != len(t):
return False
# 完全相同的字符串情况处理
if s == t:
counter = Counter(s)
for char_count in counter.values():
if char_count >= 2: # 存在重复字符即可
return True
return False
mapping_s_to_t = {}
mapping_t_to_s = {}
for c1, c2 in zip(s, t):
if c1 not in mapping_s_to_t:
mapping_s_to_t[c1] = c2
elif mapping_s_to_t[c1] != c2:
return False
if c2 not in mapping_t_to_s:
mapping_t_to_s[c2] = c1
elif mapping_t_to_s[c2] != c1:
return False
return True
```
上述代码逻辑如下:
- 首先检查两者长度是否一致。
- 对于相等情况下的特殊判定:如果字符串本身无重复字符则无法通过任何置换达成目标状态。
- 构建双向映射关系来确保每次替换的一致性和唯一性。
#### 2. 时间复杂度分析
该方法的时间复杂度主要由字典查找决定,因此整体时间复杂度为 O(n),其中 n 是输入字符串的长度。
---
### 示例测试用例
以下是几个典型的测试场景及其预期结果:
```python
print(canConvert("aab", "baa")) # 输出应为True
print(canConvert("abc", "bac")) # 输出应为False
print(canConvert("abcdefghijklmnopqrstuvwxyz", "bcadefghijklmnopqrstuvwxyza")) # 输出应为True
print(canConvert("abcdefg", "gfedcba")) # 输出应为True
```
这些例子涵盖了不同的边界状况以及常规情形下程序的表现评估。
---
阅读全文
相关推荐
















