java - 不确定这段代码的时间复杂度

标签 java string algorithm

<分区>

我最近解决了 https://www.geeksforgeeks.org/find-given-string-can-represented-substring-iterating-substring-n-times/ 上提出的一个问题

问题是确定是否可以通过迭代子字符串 n 次从子字符串表示特定字符​​串。

例如字符串"abcabcabc"可以通过迭代子字符串"abc" 3来表示。

我想到了这个 Java 解决方案

public static boolean canForm (String str) {

    if(str.isEmpty()||str.length()==1) return true;

    int end;

    if (str.length()%2==0) {
        end = str.length()/2;
    } else {
        end = (str.length()-1)/2;
    }

    for (int i=1; i<=end; i++) {
        String s = str.substring(0,i);
        String compare = "";
        while (compare.length()<str.length()) {
         compare += s;
        }
        if (compare.equals(str)) return true;
    }

    return false;
}

问题的一个条件是解为 O(n)。我得出的结论是 O(n),但我不确定我的解决方案是否真的是 O(n) 或者实际上是 O(n^2) 以及为什么。

最佳答案

您的程序在 O(n^2) 中运行,其中 n 与字符串的长度成正比。您的代码有一个 while 循环,它在一个循环 n 次的 for 循环中循环 n 次。 因此程序的顺序是 O(n*n)=O(n^2)。

关于java - 不确定这段代码的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48386573/

相关文章:

java - 如何使用自定义jar覆盖现有的jar配置

java - 声明性 XML -> POJO 转换

java - 在java中解析中文字符显示出奇怪的行为

在 C 中创建多个随机字符串

Java:多维数组中的连续区域,用于实现一个拉丁方

algorithm - 严重停留在图形任务上

java - 使用c :import to load Spring MVC View into div

java - 如何将 Kafka (Java) 应用程序从 Windows 连接到 Linux 中的 Confluence

Python - 如果项目是字符串,则将列表项目转换为 unicode

algorithm - 以最佳方式在图表中放置方框(无交叉线)