题目
思路
这道题的特殊之处在与第k次操作正好要将一个字符切换k次,而根据题意,切换一个字符k次和k+26n次是等效的,这里的n可以理解为“轮”。如果两个字符串的比较过程中出现了最小切换次数相同的字符,那么它们肯定有一个要在下一轮中才能操作成功。即有m个最小切换次数为l次的字符的话,那么至少需要m+(l-1)*26次操作才可以。因此本题只需要在遍历比较的过程中找到最大的操作次数,最后和k比较即可。
代码
class Solution:
def canConvertString(self, s: str, t: str, k: int) -> bool:
n=len(s)
m=len(t)
vis={}
if n!=m:
return False
for i in range(n):
temp=(ord(t[i])-ord(s[i])+26)%26
if temp!=0:
vis[temp]=vis.get(temp,0)+1
ans=0
#print(vis)
K=k
for k,v in vis.items():
temp=k+(v-1)*26
ans=max(temp,ans)
return ans<=K