zoukankan      html  css  js  c++  java
  • 字符串-暴力搜索-2014. 重复 K 次的最长子序列

    2021-10-08 15:49:36

    问题描述:

    给你一个长度为 n 的字符串 s ,和一个整数 k 。请你找出字符串 s 中 重复 k 次的 最长子序列 。

    子序列 是由其他字符串删除某些(或不删除)字符派生而来的一个字符串。

    如果 seq * k 是 s 的一个子序列,其中 seq * k 表示一个由 seq 串联 k 次构造的字符串,那么就称 seq 是字符串 s 中一个 重复 k 次 的子序列。

    举个例子,"bba" 是字符串 "bababcba" 中的一个重复 2 次的子序列,因为字符串 "bbabba" 是由 "bba" 串联 2 次构造的,而 "bbabba" 是字符串 "bababcba" 的一个子序列。
    返回字符串 s 中 重复 k 次的最长子序列  。如果存在多个满足的子序列,则返回 字典序最大 的那个。如果不存在这样的子序列,返回一个 空 字符串。

    示例 1:

    输入:s = "letsleetcode", k = 2
    输出:"let"
    解释:存在两个最长子序列重复 2 次:let" 和 "ete" 。
    "let" 是其中字典序最大的一个。
    示例 2:

    输入:s = "bb", k = 2
    输出:"b"
    解释:重复 2 次的最长子序列是 "b" 。
    示例 3:

    输入:s = "ab", k = 2
    输出:""
    解释:不存在重复 2 次的最长子序列。返回空字符串。
    示例 4:

    输入:s = "bbabbabbbbabaababab", k = 3
    输出:"bbbb"
    解释:在 "bbabbabbbbabaababab" 中重复 3 次的最长子序列是 "bbbb" 。

    提示:

    n == s.length
    2 <= k <= 2000
    2 <= n < k * 8
    s 由小写英文字母组成

    问题求解:

    问题的规模决定了可以进行暴力搜索,另外,通过python实现可以非常简洁高效。

        def longestSubsequenceRepeatedK(self, s: str, k: int) -> str:
            freq = Counter(s)
            hot = ''.join(c * (freq[c] // k) for c in sorted(freq, reverse=True))
            for i in range(len(hot), 0, -1):
                for item in permutations(hot, i):
                    word = "".join(item)
                    ss = iter(s)
                    if all(c in ss for c in word * k):
                        return word
            return ""
    

      

  • 相关阅读:
    JDK源码那些事儿之LinkedBlockingQueue
    JDK源码那些事儿之并发ConcurrentHashMap上篇
    JDK源码那些事儿之ArrayBlockingQueue
    JDK源码那些事儿之HashMap.TreeNode
    mycat使用schema配置
    redis连接数高居不下,怎么破?。。。。这么破
    修改tomcat使用的的编码方式
    centos6.x下让redis以服务方式运行
    mycatrule
    HTML和XML中的转义字符
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/15380201.html
Copyright © 2011-2022 走看看