Palindrome Partition

这道题就是标准的DFS,而且不需要额外的查重,只需要判断起始点和当前点之间的字符串是不是对称就行

class Solution(object):
    def partition(self, s):
        """
        :type s: str
        :rtype: List[List[str]]
        """
        tmp, res = [], []
        self.helper(0, len(s), tmp, res, s)
        return res

    def helper(self, start, end, tmp, res, string):
        if start == end:
            ref = tmp[:]
            res.append(ref)
            return 

        for i in xrange(start, end):
            if not self.isPalindrome(string[start : i + 1]):
                continue
            tmp.append(string[start : i + 1])
            self.helper(i + 1, end, tmp, res, string)
            tmp.pop()

    def isPalindrome(self, string):
        start, end = 0, len(string) - 1
        while start < end:
            if string[start] != string[end]:
                return False
            start += 1
            end -= 1

        return True

下面是Java版本,主要用来熟悉Java的具体实现

public class Solution {
    public List<List<String>> partition(String s) {
        List<List<String>> result = new ArrayList<>() ;
        List<String> tmp = new ArrayList<>();
        helper(0, s.length(), tmp, result, s);
        return result;
    }

    public void helper(int start, int end, List<String> tmp, List<List<String>> result, String string) {
        if (start == end) {
            ArrayList<String> ref = new ArrayList<>(tmp);
            result.add(ref);
            return;
        }

        for (int i = start; i < end; i++) {
            if (!isPalindrome(string.substring(start, i + 1))) {
                continue;
            }
            tmp.add(string.substring(start, i + 1));
            helper(i + 1, end, tmp, result, string);
            tmp.remove(tmp.size() - 1);
        }
    }

    public boolean isPalindrome(String string) {
        int start = 0;
        int end = string.length() - 1;

        while (start < end) {
            if (string.charAt(start) != string.charAt(end)) {
                return false;
            }

            start++;
            end--;
        }
        return true;
    }
}

results matching ""

    No results matching ""