网站首页 > 精选教程 正文
分割回文串
题目描述:给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-partitioning/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:递归法
首先处理两种特殊情况,如果字符串为null,直接返回空结果集;如果字符串的长度为1,则只有一种分割情况,直接返回这种情况。
当字符串的长度大于1时,使用递归的方式处理,其中会使用一个判断字符串是否是回文串的方法isHuiwen,递归过程如下:
- 从字符串的第一个字符开始判断,参数有前面已经被分区的回文串list、当前位置、当前要判断的子串;
- 首先判断如果已经处理到字符串的最后一个字符,如果当前分区字符串是回文串,则将当前分区字符串添加到partitions,然后将之添加到结果集中,否则,直接返回;
- 否则,首先判断当前分区字符串是否是回文串,有两种可能:如果是,则将当前分区字符串添加到partitions,将下一个字符作为新的分区字符串开始递归判断;如果不是,将下一个字符添加到当前分区字符串中,递归判断。
最后,返回结果集。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class LeetCode_131 {
// 结果集
private static List<List<String>> result = new ArrayList<>();
public static List<List<String>> partition(String s) {
// 如果字符串为null,直接返回空结果集
if (s == null) {
return new ArrayList<>();
}
// 如果字符串只有一个字符,只可能有一个结果,直接返回
if (s.length() == 1) {
List<String> partition = new ArrayList<>();
partition.add(s);
result.add(partition);
return result;
}
partition(s, 0, new ArrayList<>(), s.substring(0, 1));
return result;
}
/**
* 递归方法
*
* @param s 原始字符串
* @param pos 当前位置
* @param partitions 当前位置之前已经被分割的回文串
* @param curPartition 当前分区字符串
*/
private static void partition(String s, int pos, List<String> partitions, String curPartition) {
// 已经处理到字符串的最后一个字符
if (pos == s.length() - 1) {
if (isHuiwen(curPartition)) {
// 如果当前分区字符串是回文串,则将当前分区字符串添加到partitions,然后将之添加到结果集中
List<String> newPartitions = new ArrayList<>(Arrays.asList(new String[partitions.size()]));
Collections.copy(newPartitions, partitions);
newPartitions.add(curPartition);
result.add(newPartitions);
}
return;
}
// 如果当前分区字符串是回文串,则将当前分区字符串添加到partitions,然后递归判断下一个字符
if (isHuiwen(curPartition)) {
List<String> newPartitions = new ArrayList<>(Arrays.asList(new String[partitions.size()]));
Collections.copy(newPartitions, partitions);
newPartitions.add(curPartition);
partition(s, pos + 1, newPartitions, s.substring(pos + 1, pos + 2));
}
// 递归处理下一个字符串
partition(s, pos + 1, partitions, curPartition + s.substring(pos + 1, pos + 2));
}
/**
* 判断字符串是否是回文串
*
* @param str 字符串
* @return
*/
private static boolean isHuiwen(String str) {
if (str == null || str.length() < 2) {
return true;
}
for (int i = 0; i < str.length() / 2; i++) {
if (str.charAt(i) != str.charAt(str.length() - 1 - i)) {
return false;
}
}
return true;
}
public static void main(String[] args) {
for (List<String> string : partition("aab")) {
System.out.println(string);
}
}
}
【每日寄语】 弃燕雀之小志,慕鸿鹄而高翔。
- 上一篇: java string 深入解析
- 下一篇: 「每日一面」如何把一段逗号分割的字符串转换成一个数组?
猜你喜欢
- 2024-11-18 Python学习(十)字符串的常用操作详解「Ⅱ」
- 2024-11-18 java基础—string,值得java初学者收藏的文章
- 2024-11-18 Java将 PDF 拆分为多个 PDF 文件
- 2024-11-18 「LeetCode」分割回文串 II Java题解
- 2024-11-18 【算法题】1593. 拆分字符串使唯一子字符串的数目最大
- 2024-11-18 《Java程序设计》课程代码题(一)
- 2024-11-18 JAVA后台开发的瑞士军google guava 集合,字符串实测
- 2024-11-18 Java字符串相关面试题
- 2024-11-18 LeetCode笔记|131:分割回文串
- 2024-11-18 Java基础学习之与字符串相关的正则表达式
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)