【Java每日一题,dp预处理+回溯】回文串分割

简介: 【Java每日一题,dp预处理+回溯】回文串分割

Introduction

回文串指其正向和反向相等的字符串。输入一个字符串,请将该字符串分割为一些子串,使得每个子串都是回文字符串,输出符合要求的最少的分割次数。


Input

输入为一行不包含空格的连续字符串。长度不超过100


Output

一个整数,分割次数


Sample

input

aaaaaaaaaaaaaaaa

output

0

Solution

import java.util.Scanner;
public class Main {
    static int min;
    static boolean[][] dp;
    static char[] arr;
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        String str=s.nextLine();
        arr = str.toCharArray();
        int len=arr.length;
        dp = new boolean[len][len];
        // 状态转移方程:在 s[i] == s[j] 的时候,dp[i][j] 参考 dp[i + 1][j - 1]
        for (int right = 0; right < len; right++) {
            for (int left = 0; left <= right; left++) {
                if (arr[left] == arr[right] && (right - left <= 2 || dp[left + 1][right - 1])) {
                    dp[left][right] = true;
                }
            }
        }
        if(str.length()==0){
            System.out.println(0);
        }else {
            min=Integer.MAX_VALUE;
            backtracking(0,arr.length,0);
            System.out.println(min-1);
        }
    }
    public static void backtracking(int index, int len, int count){
        if(index==len){
            min=Math.min(count,min);
            return;
        }
        for(int i=index;i<len;i++){
            if(!dp[index][i])continue;
            count+=1;
            backtracking(i+1,len,count);
            count-=1;
        }
        return;
    }
}

Experience

这道题真只有80分,不知道问题出在了哪里。先是使用dp找到所有的回文字符串,然后回溯统计回文字符串切割的最少次数。

相关文章
|
6月前
|
Java
Java 字符串分割split空字符串丢失解决方案
Java 字符串分割split空字符串丢失解决方案
|
6月前
|
存储 canal 算法
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
54 0
|
5月前
|
IDE Java 编译器
使用Java分割PDF文件
使用Java分割PDF文件
|
3月前
|
Java
Java系列之:字符串的截取及分割 split() 和 substring()
这篇文章通过示例代码讲解了Java中字符串的截取和分割操作,包括使用`split()`方法根据正则表达式进行字符串分割以及使用`substring()`方法进行字符串截取的不同使用方式及其输出结果。
Java系列之:字符串的截取及分割 split() 和 substring()
|
5月前
|
Java
java字符串分割split你用对了吗
java字符串分割split你用对了吗
|
5月前
|
Java
迷宫回溯(java)
迷宫回溯(java)
|
5月前
|
Java
java将字符串按照指定长度分割成字符串数组
java将字符串按照指定长度分割成字符串数组
162 0
|
5月前
|
存储 算法 Java
【经典算法】LeetCode 125. 验证回文串(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 125. 验证回文串(Java/C/Python3实现含注释说明,Easy)
31 0
|
6月前
|
Java
java读取txt文件,使用逗号,分号,空格,回车将文件内容分割成一个一个的词组,找出所有重复的词组
java读取txt文件,使用逗号,分号,空格,回车将文件内容分割成一个一个的词组,找出所有重复的词组
145 38
|
6月前
|
Java
java List数组根据给定大小分割数组
在获取到很长的数组时,一次性处理数据量太大,需要分批处理,这就需要分批处理了。 1、使用List的subList,封装方法 2、google工具类型Lists的partition 经测试个人推荐使用第一种方法,效率上快了10几倍,估计是因为没有重新生成数组的原因
269 8