算法题:字符串移位包含问题

79 阅读1分钟

问题:

给定两个字符串s1和s2,要求判定s2是否能够被s1做循环移位(rotate)得到的字符串包含。例如给定s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false.

1.解决方案一:

保留求解:

def isExist(src,des):
    src = list(src)
    len1 = len(src)
    len2 = len(list(des))
    for i in range(0,len1):
        tempchar = src[0]
        for j in range(0,len1-1):
            src[j] = src[j+1]
        src[len1-1] = tempchar
        print(src,'src');
        print(''.join(src[0:len2]),'src');
        if ''.join(src[0:len2]) == des:
            return True
    return False
2.解决for循环嵌套问题:

理论依据:
1. 通过空间换时间
2.对s1循环过程研究,循环过程字符串都是s1s1的子串,因此可以减少一次for循环,代码如下:

def isExist(src,des):
    src = list(src * 2) # 
    len1 = len(src)
    len2 = len(list(des))
    for i in range(len1-len2+1):
        print(''.join(src[i:i+len2]),'src');
        if ''.join(src[i:i+len2]) == des:
            return True
    return False