lintcode(136)分割回文串

来源:互联网 发布:osi模型网络层相关 编辑:程序博客网 时间:2024/06/01 08: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;    }}


0 0