字符串旋转+{字符串in操作 } {split 操作}

字符串旋转

http://www.nowcoder.com/questionTerminal/cb27a2cc0e8b41cbbdab7b0ca5c1bc23

题目描述

字符串旋转:
给定两字符串A和B,如果能将A从中间某个位置分割为左右两部分字符串(都不为空串),并将左边的字符串移动到右边字符串后面组成新的字符串可以变为字符串B时返回true。
例如:如果A=‘youzan’,B=‘zanyou’,A按‘you’‘zan’切割换位后得到‘zanyou’和B相同返回true。
输入描述:
2个不为空的字符串(说明:输入一个字符串以英文分号";"分割为2个字符串)
例如:youzan;zanyou 即为A=‘youzan’,B=‘zanyou’
输出描述:
输出true或false(表示是否能按要求匹配两个字符串)

第一次写的

想法:寻找最大匹配的字符串,从节点分割进行匹配判断,LCS问题

while True:
    try:
        string = input()
        index=string.find(';')
        string1=string[:index]
        index=index+1
        string2=string[index:]
        len1 = len(string1)
        len2 = len(string2)
        res = [[0 for i in range(len1+1)] for j in range(len2+1)] 
     #python 初始化二维数组 [len2+1],[len1+1]
        for i in range(1,len2+1):  #开始从1开始,到len2+1结束
            for j in range(1,len1+1):  #开始从1开始,到len2+1结束
                if string2[i-1] == string1[j-1]:
                    res[i][j] = res[i-1][j-1]+1
                else:
                    res[i][j] = max(res[i-1][j],res[i][j-1])
        ind=res[-1][-1]  #返回res[len2+1][len1+1]
        if (string1[:ind]==string2[len(string2)-ind:] and string1[ind:]==string2[:len(string2)-ind]) or (string2[:ind]==string1[len(string2)-ind:] and string2[ind:]==string1[:len(string2)-ind]):
            print('true')
        else:
            print('false')
    except:
        break

看到一个非常难以置信简洁的答案

链接:https://www.nowcoder.com/questionTerminal/cb27a2cc0e8b41cbbdab7b0ca5c1bc23?f=discussion
来源:牛客网

a, b = input().split(";")
if not len(a) == len(b):
    print("false")
    exit()
repeat = a + a
if b in repeat:
    print("true")
else:
    print("false")
全部评论

相关推荐

04-11 21:31
四川大学 Java
野猪不是猪🐗:(ja)va学弟这招太狠了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务