繁体   English   中英

如何确定旋转字符串算法的时空复杂度

[英]How to determine the Time and Space complexity of rotate string algorithm

谁能解释下面的旋转字符串代码段的时间和空间复杂度。

引用此示例的书说:

复杂度分析

时间复杂度:O(N ^ 2),其中N是A的长度。

空间复杂度:O(N),用于A + A的空间。

但是我不明白。 有人可以解释吗?

示例1:输入:A ='abcde',B ='cdeab'输出:true

示例2:输入:A ='abcde',B ='abced'输出:false

public class RotateString {
public static void main(String[] args) {
    System.out.println(rotateString("abcd","dabc"));
}
 public static boolean rotateString(String a, String b) {
       return a.length()==b.length() && (a+a).contains(b);
 }

}

空间复杂度为O(N),因为要添加两个长度为N的字符串,这将创建一个新的长度为2 * N的字符串。 任何常数* N仍为O(N)。

由于contains()检查所花费的时间,所以时间复杂度为N * N。 您正在检查长度为2 * N的字符串是否包含另一个长度为N的字符串。要使用简单的for循环执行此操作,您将必须在2 * N个位置中的每个位置开始检查,看看接下来的N个字符是否与目标字符串N匹配。因此,比较次数将是2 * N乘以N = 2 * N ^ 2〜= O(N ^ 2)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM