算法:一个字符串子字符串相乘最大
程序员文章站
2023-12-21 16:38:04
...
题目:
设字符串s存在两个子字符串s1,s2。
使得s1的长度Xs2的长度 的最大值
s1 , s2 没有相交元素
举例:s=‘adcbadcbedbadedcbacbcadbc’
s1=‘ded’ s2 = 'cbacbca’最大
结果为 21
分析过程
分析,求字符串的子字符串相乘,先求两个子字符串。
取得两个子字符串的过程用滑动窗口
的思想
一
1,求字符串s 的子字符串 a 组成的所有对。如 [a,bcbc] 为一对。
2,求ab的所有对
3,求abc的所有对
...
二
1,求b 组成的所有对。如 [b,c].
...
依次求完。
三
在求子串的同时,将两个子串长度相乘,取最大值。
编码+注解
class Solution:
def function(self,s):
res = 0
len_s = len(s)
i = 0 # s1 的起始下标
# 循环3
for i in range(0,len_s):
# 循环2,不断延伸s1
# ii s1 的终止下标
for ii in range(i+1,len_s):
j = k = ii # s2 的起始和终止下标
s1 = s[i:ii]
s2 = []
# 循环1,获取1对 字符对,取最大 长度 的乘积
while k<len_s:
if s[j] in s1:
j+=1
k=j
else:
if s[k] in s1:
res = max(res,len(s1)*len(s2))
s2 = []
j = k+1
k=j
else:
s2.append(s[k])
k+=1
# 如果s2不是空的,还要计算一次
res = max(res, len(s1) * len(s2))
return res
if __name__ == '__main__':
s='adcbadcbedbadedcbacbcadbc'
print(Solution().function(s))