问题描述
给定2个字符串s和t,每次可以任意交换s的奇数位或偶数位上的字符,即奇数位上的字符能与其他奇数位上的字符互换,偶数位上的字符也能与其他偶数位字符互换,问能否经过若千次交换,使s变成t。
问题示例
输入:s="abcd”,t=“cdab"输出: Yes
输入:s="abcdef”,t=“cdabfe"输出:No
代码实现
def is_twin(_s,_t):
if len(_s)!=len(_t):
return 'No'
oddS=[] #s的偶数位
evenS=[] #S的奇数位
oddT=[] #T的偶数位
evenT=[] #T的奇数位
#按字符遍历
for i in range(len(_s)):
if i & 1:#如果i与1,结果为1,则为奇数
oddS.append(_s[i])
oddT.append(_t[i])
else:
evenS.append(_s[i])
evenT.append(_t[i])
#排序
oddS.sort()
oddT.sort()
evenT.sort()
evenS.sort()
#比较偶数位上s和t是否一致
for i in range(len(oddS)):
if oddS[i] !=oddT[i]:
return "NO"
# 比较奇数位上s和t是否一致
for i in range(len(oddS)):
if evenS[i] != evenT[i]:
return "NO"
return "Yes"
if __name__ == "__main__":
s="abcd"
t="cdab"
print(is_twin(s,t))