字符串旋转+{字符串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")