# 2825. Make String a Subsequence Using Cyclic Increments

"""
you are given two 0-indexed strings 'str1' and 'str2'. in an operation, you
select a set of indices in 'str1' and for each index 'i' in the set,
increment 'str1[i]' to be the next character cyclically. that is, 'a' becomes
'b', 'b' becomes 'c', and so on. return true if it is possible to make 'str2'
a subsequence of 'str1' by performing the operation at most once, and false
otherwise. note, a subsequence is a new string that is formed from the
original string by deleting some (possible none) of the characters without
disturbing the relative positions of the remaining characters
"""


class Solution(object):
    def canMakeSubsequence(self, str1, str2):
        """
        :type str1: str
        :type str2: str
        :rtype: bool
        """
        j, n, m = 0, len(str1), len(str2)
        for i in range(n):
            if j < m and (ord(str2[j]) - ord(str1[i])) % 26 <= 1:
                j += 1
        return j == m


if __name__ == "__main__":
    obj = Solution()
    print(obj.canMakeSubsequence(str1="abc", str2="ad"))
    print(obj.canMakeSubsequence(str1="zc", str2="ad"))
    print(obj.canMakeSubsequence(str1="ab", str2="d"))