`

Palindrome Partitioning

阅读更多
Given a string s, partition s such that every substring of the partition is a palindrome.

Return all possible palindrome partitioning of s.

For example, given s = "aab",
Return

  [
    ["aa","b"],
    ["a","a","b"]
  ]

给定一个字符串,让我们把字符串分割成回文子串,并把所有可能的情况输出。我们采用回溯法,在for循环中递归搜索,如果当然搜索的子串是回文字符串,就把它加入到list中。代码如下:
public class Solution {
    public List<List<String>> partition(String s) {
        List<List<String>> result = new ArrayList<List<String>>();
        LinkedList<String> list = new LinkedList<String>();
        if(s == null) return result;
        getPartition(0, s, list, result);
        return result;
    }
    public void getPartition(int start, String s, LinkedList<String> list, List<List<String>> result) {
        if(start == s.length()) {
            result.add(new LinkedList<String>(list));
        }
        for(int i = start; i < s.length(); i++) {
            if(isPalindrome(s.substring(start, i + 1))) {
                list.add(s.substring(start, i + 1));
                getPartition(i + 1, s, list, result);
                list.removeLast();
            }
        }
    }
    
    public boolean isPalindrome(String s) {
        int l = 0;
        int r = s.length() - 1;
        while(l < r) {
            if(s.charAt(l) != s.charAt(r))
                return false;
            l ++;
            r --;
        }
        return true;
    }
}
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics