[英]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.