欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法:一个字符串子字符串相乘最大

程序员文章站 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))
相关标签: 算法

上一篇:

下一篇: