使用Python检查我们是否可以在K个动作中转换字符串的程序
假设我们有两个字符串s和t,我们必须检查是否可以在k次或更少的移动中将s转换为t。在第i步中,您可以执行这些操作。
选择s中的任何索引j(从1开始),使得1<=j<=s和j的大小在之前的任何移动中都没有被选择,并在该索引处移动字符i次。
保持原样。
这里移动一个字符意味着用字母表中的下一个字母替换它(如果字母是'z',则将其换行为'a')。因此,将字符移位i次表示应用移位操作i次。
因此,如果输入类似于s="poput"t="vwput"k=9,那么输出将为True,因为在i=6时,我们可以将'p'转换为'v',而在i=8时,我们可以将“o”转换为“w”。
为了解决这个问题,我们将按照以下步骤操作:
如果s的大小与t的大小不同,则
返回错误
count:=一个数组(最小值为1和(k-i+1+(k-i)/26)),用于从0到25的所有i
对于来自s的每个字符c1和来自t的c2,做
diff:=(c2的ASCII-c1+26的ASCII)mod26
如果count[diff]<=0,则
计数[差异]:=计数[差异]-1
返回错误
如果c1与c2不同,则
返回真
让我们看看下面的实现来更好地理解
示例
def solve(s, t, k): if len(s) != len(t): return False count = [min(1, k - i + 1) + (k - i)//26foriinrange(26)] for c1, c2 in zip(s, t): if (c1 != c2): diff = (ord(c2) - ord(c1) + 26) % 26 if count[diff] <= 0: return False count[diff] -= 1 return True s = "poput" t = "vwput" k = 9 print(solve(s, t,k))
输入
"poput","vwput",9输出结果
True