給定一個字符串s,分區s使分區的每個子字符串都是迴文。 返回s的所有可能的迴文分區。迴文分解算法的時間複雜度
我寫了一個邏輯來返回一個字符串的迴文分解,我很難駕駛這個時間複雜度。它的循環內遞歸調用
使用的邏輯是迭代每個子字符串從第一個字符開始,然後一旦我們找到迴文,我們檢查從剩餘的端口開始的下一個子字符串。我們OD這個遞歸
任何人都可以建議最好的方式在這種情況下,以推動這一
public class Solution {
public List<List<String>> partition(String s) {
List<List<String>> result = new ArrayList<List<String>>();
List<String> palindromePartition = new ArrayList<String>();
int start=0;
decompose(s,0,palindromePartition,result);
return result;
}
private void decompose(String input,int startIndex,List<String> palindromePartition,List<List<String>> result) {
if(startIndex==input.length())
{
ArrayList<String> partitionResult = new ArrayList<String>(palindromePartition);
result.add(partitionResult);
return;
}
for(int i=startIndex+1;i<=input.length();i++){
if(isPalindrome(input.substring(startIndex,i))){
palindromePartition.add(input.substring(startIndex,i));
decompose(input,i,palindromePartition,result);
palindromePartition.remove(palindromePartition.size()-1);
}
}
}
private boolean isPalindrome(String input){
int left=0;
int right=input.length()-1;
while(right>left){
if(input.charAt(left)!=input.charAt(right))
return false;
left++;
right--;
}
return true;
}
感謝@UnknowableIneffible詳細說明了解釋。然而,我以簡化的方式思考的方式是,對於任何n字符串,總共將有2^n-1個分區,而邏輯正在查看每個分區以檢查其迴文,這使得時間複雜度爲O( N * 2^N-1)。這不正確嗎? – KBR
你能告訴我你是如何得到2^n-1的嗎?另外,我只注意到我的數學錯誤,應該是O(n!),而不是O(n^n)。我修好了它。 – UnknowableIneffable
可以說如果我有字符串「abc」,字符串的每個字符之間,我可以放置一個分割。即對於n個字符的字符串,我可以有n-1個選項來分割。考慮到我可以對每個地方進行拆分或不拆分,它需要2^n-1。拆分abc是(a | b | c,a | bc,ab | c,abc) – KBR