# Program to check whether we can convert string in K moves or not using Python

PythonServer Side ProgrammingProgramming

Suppose we have two strings s and t, we have to check whether s can be converted to t in k moves or less. In ith move you can do these operations.

• Select any index j (starting from 1) in s, such that 1 <= j <= size of s and j has not been selected in any previous move, and shift the character at that index i number of times.

• Remain as it is.

Here shifting a character means replacing it by the next letter in the alphabet (if letter is 'z', then wrap it to 'a'). So shifting a character by i times indicates applying the shift operations i times.

So, if the input is like s = "poput" t = "vwput" k = 9, then the output will be True because at i = 6, we can convert 'p' to 'v', and at i = 8, we can convert 'o' to 'w'.

To solve this, we will follow these steps:

• if size of s is not same as size of t, then

• return False

• count := an array holding (minimum of 1 and (k - i + 1 +(k - i)/26)) for all i from 0 to 25

• for each character c1 from s and c2 from t, do

• if c1 is not same as c2, then

• diff :=(ASCII of c2 - ASCII of c1 + 26) mod 26

• if count[diff] <= 0, then

• return False

• count[diff] := count[diff] - 1

• return True

Let us see the following implementation to get better understanding

## Example

Live Demo

def solve(s, t, k):
if len(s) != len(t):
return False
count = [min(1, k - i + 1) + (k - i)//26 for i in range(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))

## Input

"poput","vwput",9

## Output

True
Published on 28-May-2021 12:54:45