lintcode(136)分割回文串
阿新 • • 發佈:2019-01-06
描述:
給定一個字串s,將s分割成一些子串,使每個子串都是迴文串。
返回s所有可能的迴文串分割方案。
樣例:
給出 s = "aab"
,返回
[
["aa", "b"],
["a", "a", "b"]
]
思路:
應用遞迴來實現,每次從起始位置一次擷取1,2...個字元長度,並且判斷是否為迴文串,是則進行下一步遞迴。
public class Solution { /** * @param s: A string * @return: A list of lists of string */ public List<List<String>> partition(String s) { // write your code here List<List<String>> result = new ArrayList<List<String>>(); if(s == null){ return result; } List<String> temp = new ArrayList<String>(); if(s.length() == 0){ result.add(temp); return result; } search(s , result , temp ,0); return result; } public void search(String s , List<List<String>> result , List<String> temp , int start){ if(start == s.length()){ List<String> p = new ArrayList<String>(temp); result.add(p); return; } for(int i = start;i<s.length();i++){ if(isPartition(s.substring(start , i+1))){ temp.add(s.substring(start , i+1)); search(s , result , temp , i+1); temp.remove(temp.size() - 1); } } } public boolean isPartition(String temp){ int i = 0; int j = temp.length() - 1; while(i<j){ if(temp.charAt(i) != temp.charAt(j)){ return false; } i++; j--; } return true; } }