当前位置: 首页 > 知识库问答 >
问题:

在获取两个给定字符串之间最小可整除字符串的长度时,如何降低时间复杂度?

姚棋
2023-03-14

s='bcdbcdbcdbcdcd't='bcdbcd'

如果string''被串联两次,则结果为'bcdbcdbcdbcd'='s'。字符串“%s”可被字符串“t”整除。可以级联以创建字符串's'和't'的最小字符串'x'是'bcd'。它的长度是3。

//My Code:
String smallest = Arrays.stream(s.split(regex(""))
.collect(Collectors.groupingBy(
    x -> firstRepeating(t, x) ? x + x : x, 
    LinkedHashMap::new, 
    Collectors.counting()))
    .keySet().stream().collect(Collectors.joining());

     if((s.length() % t.length()) == 0){
        System.out.printf("%s is divisible by %s%n", s, t);
       }

  System.out.println("The smallest string is " + small);

共有1个答案

孔乐邦
2023-03-14

基于我的理解,这里是我想出来的。也可以代入自己的数据进行测试。

假设:

  1. 两个字符串都是同一个较小子字符串的串联。
  2. 因此,如果剩余(%)运算符在除以它们的长度时返回零,则一个将除以另一个。
    static Random r = new Random();
    public static void main(String[] args) {

        for (int i = 0; i < 10; i++) {
            int seed = r.nextInt();
            String t = generate(3,7,seed);
            String s = generate(7,11,seed);

            int index = 0;
            for (int i = 1; i < s.length()/2; i++) {
               if (s.regionMatches(0,s,i,i)) {
                  index = i;
               }
            }
            int index = 0;
            for (int idx = 1; idx < s.length()/2; idx++) {
              if (s.regionMatches(0,s,idx,idx)) {
                index = idx;
              }
            }
            String small = s.substring(0,index);

            // Check to make certain this isn't just a repeated character.
            small = small.replaceAll("^(.)\\1+$", "$1"); 
            boolean isDivisible = s.length() % t.length() == 0;
            System.out.printf("%s is " + ((isDivisible) ? "" : "NOT") 
                 + " divisible by %s%n",
                        s, t);

            System.out.println(
                    "The smallest string is " + small + "\n");
        }

    }

    static String alphabet = "abcdefghijklmnopqrstuvwxyz";

    public static String generate(int s, int e, int seed) {
        r.setSeed(seed);
        String stem = IntStream.range(3, 8).mapToObj(i -> {
            int len = r.nextInt(26);
            return alphabet.substring(len, len + 1);
        }).collect(Collectors.joining());
        return stem.repeat(r.nextInt(e)+s);
    }
 类似资料:
  • 问题内容: 数据如下所示: 我希望它看起来像这样: 摆脱一个或另一个很简单。 这: 给我这样的建议:倡议:可信来源倡议:及时的倡议:数据库规范化 还有这个: 给我这个: 很难弄清楚如何将两者结合起来。 问题答案: 只是使用怎么样? 或者,如果您不知道前缀有多长时间: 这是一个。

  • 问题内容: 切片Python字符串的时间复杂度是多少?鉴于Python字符串是不可变的,我可以想象对它们进行切片或取决于切片的实现方式。 我需要编写一个遍历(可能很大)字符串的所有后缀的函数。我可以通过将后缀表示为整个字符串的元组和一个索引以开始从中读取字符来避免对字符串进行切片,但这很丑陋。相反,如果我天真地像这样写我的函数: … …将其时间复杂度是或,其中是? 问题答案: 简短的答案:通常是切

  • 问题内容: 我需要从两个字符之间获取字符串。我有这个 并且必须在一个变量中分别返回4个字符串: 问题答案: 有。由于它接受正则表达式字符串,并且是正则表达式中的特殊字符,因此您需要对其进行转义(带有反斜杠)。而且,由于是在Java中字符串字面特殊字符,你需要逃脱 它 ,也一样,人们有时会感到迷惑。因此给出: 然后 将输出 ( 在 前三位上 有 尾随空格;如果需要,这些空格。)

  • 问题内容: 我从html解析中得到一个字符串,即 我的代码是这样的 我不确定我的第二个拆分字符串应该是“’”还是“’,” 我希望我的结果是 问题答案: 我将使用正则表达式从这样的复杂输入中提取子字符串。 Swift 3.1: Swift 2.0:

  • 问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我需要一个函数来返回两个单词(或两个字符)之间的子字符串。我想知道是否有实现该功能的php函数。我不想考虑正则表达式(嗯,我可以做一个,但实际上并不认为这是最好的方法)。思维与功能。这是一个例子: 我们调用该函数: 它返回:“我想要一个蛋糕”。 提前致谢。 更新: 嗯,到

  • 问题内容: 我有一个像 “ ABC [这是为了提取]” 我想提取Java中的部分。我正在尝试使用split,但是它不能按我想要的方式工作。有人有建议吗? 问题答案: 如果您的字符串中只有一对方括号(),则可以使用: