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

题目:

设字符串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))
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值