|
发表于 2023-4-25 21:01:02
|
显示全部楼层
本帖最后由 sfqxx 于 2023-4-25 21:07 编辑
首先,需要判断两个字符串是否长度相等,且字符集是否完全一致。如果不满足这两个条件,直接返回False。
然后,对于str1中每个位置i的字符进行循环,如果该位置上的字符与str2中对应位置上的字符都相同,则继续循环下一个位置;否则,就记录下这两个字符的索引值,并将其存储在变量pos列表中。当pos列表里存储了两个元素时,就可以通过交换这两个索引处的字符来判断是否可行,即比较str1和str2在这两个位置处交换之后是否相等。如果是,则返回True;否则,继续循环,直到处理完所有的字符位置。如果最终没有找到可行的情况,返回False。
代码如下:
- def can_swap(str1, str2):
- if len(str1) != len(str2):
- return False
- if set(str1) != set(str2):
- return False
- pos = []
- for i, (c1, c2) in enumerate(zip(str1, str2)):
- if c1 != c2:
- pos.append(i)
- if len(pos) == 2:
- idx1, idx2 = pos
- if str1[idx1] == str2[idx2] and str1[idx2] == str2[idx1]:
- return True
- else:
- return False
- return False if pos else True
复制代码
测试结果如下:
- assert can_swap("read", "raed") == True
- assert can_swap("abc", "acb") == True
- assert can_swap("abcd", "abdc") == True
- assert can_swap("aaa", "aaa") == False
- assert can_swap("hello", "olleh") == False
复制代码
有用请设置最佳答案
|
|