Leetcode之回溯法专题-131. 分割回文串(Palindrome Partitioning)


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

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

示例:

输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]

分析:给定一个字符串,要求分割,并且要求分割出来的所有的串是回文串。
利用回溯,每次dfs分两个分支 1、不分割继续往下 2、分割后在往下 代码中dfs函数str存放字符串,n存放总长度,step存放当前位置,now是现在已经分割出来的字符串,
remain是字符串剩余还没有分割的,list里装的是分割出来的now 另外加了一个函数来判断,是否为回文串。
class Solution {
List<List<String>> ans = new ArrayList<>(); public List<List<String>> partition(String s) {
if (s.length() == 0 || s == null) {
return ans;
}
dfs(s,s.length(),0,"",s,new ArrayList<String>());
return ans;
} public void dfs(String str, int n, int step, String now, String remain,
ArrayList<String> list) { if (n == step) { if (!now.equals("") && isPalindrome(now)) {
list.add(now);
ans.add(new ArrayList<>(list));
list.remove(list.size() - 1);
}else if(!remain.equals("") && isPalindrome(remain)){
list.add(remain);
ans.add(new ArrayList<>(list));
list.remove(list.size() - 1);
}else if(list.size()!=0 && String.join("",list).equals(str)){ ans.add(new ArrayList<>(list));
} return;
} dfs(str, n, step + 1, now + str.charAt(step),
remain.replaceFirst(str.charAt(step) + "", ""), list); if (!now.equals("") && isPalindrome(now)) {
// System.out.println(step+" "+now + " " + remain);
list.add(now);
dfs(str, n, step + 1, remain.charAt(0)+"", remain.replaceFirst(remain.charAt(0)+"", ""), list);
list.remove(list.size() - 1); } } public boolean isPalindrome(String str) { for (int i = str.length()-1, j = 0; i>=0 && j<=str.length() && i!=j; i--, j++) {
if (str.charAt(i) != str.charAt(j)) {
return false;
}
}
return true;
}
}

Leetcode之回溯法专题-131. 分割回文串(Palindrome Partitioning)的更多相关文章

  1. LeetCode 131. 分割回文串(Palindrome Partitioning)

    131. 分割回文串 131. Palindrome Partitioning 题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. LeetC ...

  2. 分割回文串 · Palindrome Partitioning

    [抄题]: 给定一个字符串s,将s分割成一些子串,使每个子串都是回文串. 返回s所有可能的回文串分割方案. 给出 s = "aab",返回 [ ["aa", & ...

  3. [Swift]LeetCode131. 分割回文串 | Palindrome Partitioning

    Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...

  4. Java实现 LeetCode 131 分割回文串

    131. 分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa ...

  5. Leetcode 131.分割回文串

    分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa" ...

  6. LeetCode 131. 分割回文串(Palindrome Partitioning)

    题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa" ...

  7. 131. 分割回文串 javascript实现

    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa",&quo ...

  8. [LeetCode] 132. 分割回文串 II

    题目链接 : https://leetcode-cn.com/problems/palindrome-partitioning-ii/ 题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子 ...

  9. Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III)

    Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III) 同类题目: Leetcode之回溯法专题-39. 组合总数(Combination Sum) Lee ...

随机推荐

  1. springMVC保存数据到mysql数据库中文乱码问题解决方法

    1.web.xml中添加过滤器 <filter> <filter-name>CharacterEncodingFilter</filter-name> <fi ...

  2. 1.Java概述、安装及环境搭建

    1. 前言 1.1 学习方法 1. 学会学习的方法 2. 学会独立解决问题 3. 主动的学习而不是被动的接受 4. 知识的大家的,能力才是自己的 1.2 推荐博客 当代程序员都应该养成写博客.看博客的 ...

  3. mybatis动态插入数据库

    <insert id="dynamicAddUser"> insert into t_user <!-- trim 对所有的表中列名 进行动态处理 --> ...

  4. XSS危害——session劫持(转载)

    在跨站脚本攻击XSS中简单介绍了XSS的原理及一个利用XSS盗取存在cookie中用户名和密码的小例子,有些同学看了后会说这有什么大不了的,哪里有人会明文往cookie里存用户名和密码.今天我们就介绍 ...

  5. GStreamer基础教程06 - 获取媒体信息

    摘要 在常见的媒体文件中,通常包含一些数据(例如:歌手,专辑,编码类型等),用于描述媒体文件.通常称这些数据为元数据(Metadata:data that provides information a ...

  6. Nginx 的简单使用 (IIS,Asp.Net)

    Nginx 的一些常见功能(windows,AspNet ,IIS) 下载 官方网站:https://nginx.org/en/download.html 下载,解压缩是这个样子 启动: 启动方式有两 ...

  7. Mac OS 安装mysqlclient 遇到的坑~

    最近在学习Python, 因为Django连接mysql 需要安装mysqlclient, 但Mac安装遇到各种问题,这里记录一下,避免以后再踩坑. 1.   正常情况下,安装mysqlclient ...

  8. 证明线程池ThreadPoolExecutor的核心线程数,最大线程数,队列长度的关系

    关于线程池的几个参数,很多人不是很清楚如何配置,他们之间是什么关系,我用代码来证明一下. package www.itbac.com; import java.util.concurrent.*; p ...

  9. Android:JNI与NDK(三)NDK构建的脚本文件配置

    友情提示:欢迎关注本人公众号,那里有更好的阅读体验以及第一时间获取最新文章 本文目录 一.前言 本篇我们介绍Android.mk与CMakeLists.txt构建NDK的配置文件,我们知道目前NDK的 ...

  10. Service 使用详解

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...