分割回文串

来源:互联网 发布:音频矩阵怎么调 编辑:程序博客网 时间:2024/05/18 02:50

给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。

返回s所有可能的回文串分割方案。

样例

给出 s = "aab",返回

[  ["aa", "b"],  ["a", "a", "b"]]
解题思路:DFS

用一个数组记录分割的位置,每一次都是寻找下一个可以分割的位置

public class Solution {    /**     * @param s: A string     * @return: A list of lists of string     */    List R = new ArrayList<ArrayList<String>>();    public List<List<String>> partition(String s) {        // write your code here        boolean mark[] = new boolean[s.length()];        fun(s,0,mark);        return R;    }    void fun(String str, int index,boolean[] mark){        if(index >= str.length()){            List<String> L = new ArrayList<String>();            int beg=0,last=0;            while(last < str.length()){                if(mark[last] == true){                    L.add(str.substring(beg, last+1));                    beg = last+1;                }                ++last;            }            R.add(L);        }        for(int i=index;i < str.length();++i){            if(isOK(str, index, i)){                mark[i] = true;                fun(str, i+1, mark);                mark[i] = false;            }        }    }    boolean isOK(String str, int beg, int last){        while(beg < last&&str.charAt(beg)==str.charAt(last)){            ++beg;            --last;        }        if(beg < last)            return false;        else            return true;    }}


0 0
原创粉丝点击