第一行输入一个长度为
、仅由小写字母组成的字符串
。
第二行输入一个长度为
、仅由小写字母组成的字符串
。
输出一个整数,代表
和
的最长公共子串的长度。
awaabb aawbb
2
在这个样例中,
和
都是
和
的最长公共子串。
asdfas werasdfaswer
6
while True: try: a = input() b = input() if len(a) > len(b): a,b = b,a max_length = 0 i = 0 while i + max_length < len(a): while a[i:i + max_length + 1] in b: max_length += 1 i += 1 print(max_length) except: break
while True: try: a = input() b = input() num = 0 for i in range(len(a)): if a[i-num: i+1] in b: num += 1 print(num) except: break
def find_max_substr(A,B): n, m = len(A), len(B) dp = [[''] * (m + 1) for _ in range(n + 1)] ans = '' for i in range(n - 1, -1, -1): for j in range(m - 1, -1, -1): dp[i][j] = dp[i + 1][j + 1] + B[j] if A[i] == B[j] else '' if len(dp[i][j]) > len(ans): ans = dp[i][j] # print('最长公子串为:',ans[::-1]) return len(ans) str1 = str(input()) str2 = str(input()) print(find_max_substr(str1,str2))
def cal(a, b): a, b = " "+a, " "+b dp = [ [0 for _ in b] for _ in a ] max_len = 0 for i in range(1, len(a)): for j in range(1, len(b)): if a[i] == b[j]: dp[i][j] = dp[i-1][j-1] + 1 max_len = max([max_len, dp[i][j]]) return max_len a, b = input(), input() print(cal(a, b))
# 2020年11月14日17:08:54 while True: try: str1 = input().lower() str2 = input().lower() # 寻找长字符串、和短字符串 if len(str1) > len(str2): short_str, long_str = str2, str1 else: short_str, long_str = str1, str2 # 初始最大公共字符串长度为输入的短字符串长度 length_max = len(short_str) find = 0 # 从最大值开始匹配,逐渐减少字符串长度 while length_max > 0: for i in range(len(short_str)-length_max+1): sub_str = short_str[i:i+length_max] # 子字符串也在长字符串中 if sub_str in long_str: find = 1 break if find == 1: break length_max -= 1 print(length_max) except: break
if str1[i] == str2[j]: # 如果字符相等 dp[i][j] = dp[i-1][j-1] + 1 # 则在对角线上的上一个dp值加一 else: dp[i][j] = 0
# 动态规划 # 最大公共子串的长度· str1 = input() str2 = input() # 定义初始二维数组 # 以第一个字符串为列,以第二个字符串为行 # 加 1 是为了保证动态规划第一步的前一个状态为0 dp = [[0]*(len(str2)+1) for i in range(len(str1)+1)] # print(res) for i in range(1, len(str1)+1): for j in range(1, len(str2)+1): if str1[i-1] == str2[j-1]: dp[i][j] = dp[i-1][j-1] + 1 else: dp[i][j] = 0 # print(dp) # 输出dp里的最大值 res = [] for i in dp: if res == []: res.append(max(i)) if max(i)>res[-1]: res.pop() res.append( max(i)) else: continue print(res[-1])
while True: try: a = str(input()) b = str(input()) n = 0 for i in range(len(a)): if a[i-n:i+1] in b: n += 1 print(n) except: break
def number(str_short,str_long): res = 0 for i in range(len(str_short)): for j in range(len(str_short),i-1,-1): if str_short[i:j] in str_long: if len(str_short[i:j]) > res: res = len(str_short[i:j]) break #找到i开始最长的子串 return res while True: try: str_short = input().lower() str_long = input().lower() #交换一下 if len(str_short) > len(str_long): str_short,str_long = str_long,str_short print(number(str_short,str_long)) except: break
def get_maxlength(a,b): if len(a) > len(b): a, b = b, a start = 0 long = 0 for i in range(1, len(a) + 1): if a[start:i] in b: long = max(long, i-start) continue start += 1 return long while True: try: a, b = input(), input() print(get_maxlength(a, b)) except: break