问题 A: 字符环
有两个由字符构成的环。请写一个程序,计算这两个字符环上最长连续公共字符串的长度。
例如,字符串“ABCEFAGADEGKABUVKLM”的首尾连在一起,构成一个环;
字符串“MADJKLUVKL”的首尾连在一起,构成一个另一个环;
“UVKLMA”是这两个环的一个连续公共字符串。
a,b=map(str,input().split())
if len(b)>len(a):
a,b=b,a
if a==b:
print(len(a))
else:
a += a
b += b
ma = 0
for i in range(len(b)):
for j in range(len(b)-1,-1,-1):
if b[i:j] in a:
ma=max(ma,(j-i))
print(min(ma,len(b)//2))
问题 B: 字符串最大跨距
有三个字符串S1,S2,S,其中S长度不超过300,S1和S2的长度不超过10.想检测S1和S2是否同时在S中出现,且S1位于S2的左边,并在S中互不交叉(即S1的右边界点在S2的左边界点的左侧)。计算满足上述条件的最大跨距(即最大间隔距离:最右边的S2的起始点与最左边的S1的终止点之间的字符数目)。如果没有满足条件的S1,S2存在,则输出-1.
例如,S=abcd123ab888efghij45ef67kl,S1=ab,S2=ef,其中,S1在S中出现了2次,