執行結果:
通過
顯示詳情
執行用時 :5 ms, 在所有 Java 提交中擊敗了49.84% 的用戶
內存消耗 :42.5 MB, 在所有 Java 提交中擊敗了5.10%的用戶
題目:
給定一個字符串 s,將 s 分割成一些子串,使每個子串都是迴文串。
返回 s 所有可能的分割方案。
示例:
輸入: "aab"
輸出:
[
["aa","b"],
["a","a","b"]
]
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/palindrome-partitioning
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
思路:
採用回溯法,和一般的回溯法相同,只不過在遍歷的過程中加一個判斷迴文的操作,將回文的加入。
代碼:
class Solution {
List<List<String>> result=new ArrayList<>();
public List<List<String>> partition(String s) {
if(s.length()==0||s==null)
{
return result;
}
LinkedList<String> track=new LinkedList<>();
backtrack(s,0,s.length(),track);
return result;
}
public void backtrack(String s,int start,int len,LinkedList<String> track)
{
if(start==len)
{
result.add(new LinkedList<>(track));
return;
}
for(int i=start;i<len;i++)
{
if(!help(s,start,i))
{
continue;
}
track.add(s.substring(start,i+1));
backtrack(s,i+1,len,track);
track.removeLast();
}
}
public boolean help(String s,int left,int right)
{
while(left<=right)
{
if(!(s.charAt(left)==s.charAt(right)))
{
return false;
}
left++;
right--;
}
return true;
}
}