131.Palindrome Partitioning

題目連接ide

題目大意:給出一個字符串,將其劃分,使每一個子串都是迴文串,計算處全部可能的劃分狀況。spa

法一(借鑑):很明顯的,是要用DFS。這個能夠做爲一個模板吧,就是劃分字符串的全部子串的一個模板。代碼以下(耗時9ms):code

 1     public List<List<String>> partition(String s) {
 2         List<List<String>> res = new ArrayList<List<String>>();
 3         List<String> tmp = new ArrayList<String>();
 4         dfs(s, res, 0, tmp);
 5         return res;
 6     }
 7     private static void dfs(String s, List<List<String>> res, int start, List<String> tmp) {
 8         //若是找到一種劃分狀況,則將其接入結果集中
 9         if(start == s.length()) {
10             res.add(new ArrayList<String>(tmp));
11             return;
12         }
13         //尋找每個可能的迴文字符串
14         for(int i = start; i < s.length(); i++) {
15             //判斷字符串的其中一個子串,若是是迴文
16             if(isPalindrome(s, start, i) == true) {
17                 //將這個迴文子串加入結果中,記住substring(start,end),是從start到end-1的字符串。
18                 tmp.add(s.substring(start, i + 1));
19                 //注意,下次劃分的子串起始點應該是i+1,由於i已經在上一個子串中了
20                 dfs(s, res, i + 1, tmp);
21                 //回溯移除
22                 tmp.remove(tmp.size() - 1);
23             }
24         }
25     }
26     //判斷迴文
27     private static boolean isPalindrome(String s, int start, int end) {
28         while(start <= end) {
29             if(s.charAt(start) != s.charAt(end)) {
30                 return false;
31             }
32             start++;
33             end--;
34         }
35         return true;
36     }
View Code
相關文章
相關標籤/搜索