likou分割字符串131

  • Post author:
  • Post category:其他


题目还是有点复杂,难死了,哎、、

利用循环模拟切割,传入开始下标、结束下标

当前取值已经不满足的时候,就不继续dfs了,会有重复的数据。

循环体时判断字符串的

[开始下标,结束下标]

是否满足

回文串。

一旦不满住,后面的递归就可以不进行了,因为会有重复的元素,这点其实很难理解,

所以我是用了更笨的方法,全部加入到list中,收集的时候再判

package lqb;

import java.util.ArrayList;
import java.util.List;

public class likou131 {
    public static void main(String[] args) {
        System.out.println(new likou131().partition("aab"));
    }

    List<List<String>> ans = new ArrayList<>();

    public List<List<String>> partition(String s) {
        char[] arr = s.toCharArray();
        dfs(arr, 0);
        return ans;
    }

    List<String> list = new ArrayList<>();

    private void dfs(char[] arr, int p) {
        if (p == arr.length) {
            if (addCheck(list)) {
                ans.add(new ArrayList<>(list));
            }
            return;
        }
        for (int i = p; i < arr.length; i++) {
            list.add(tostring(arr, p, i));
            dfs(arr, i + 1);
            list.remove(list.size() - 1);
        }
    }

    private boolean addCheck(List<String> list) {
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            char[] arr = s.toCharArray();
            if (!check(arr, 0, arr.length - 1)) {
                return false;
            }
        }
        return true;
    }

    private boolean check(char[] arr, int p, int i) {
        while (p < i) {
            if (arr[p++] != arr[i--]) {
                return false;
            }
        }
        return true;
    }

    private String tostring(char[] arr, int p, int i) {
        String str = "";
        for (int j = p; j <= i; j++) {
            str += arr[j];
        }
        return str;
    }
}

断。



版权声明:本文为qx020814原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。