131. Palindrome Partitioning

文章目录

  • 1 题目理解
  • 2 回溯
  • 3 动态规划

1 题目理解

输入:字符串s
规则:将字符串s分割,分割后每一个部分都是一个回文串。
输出:所有的分割方式

Example 1:

Input: s = “aab”
Output: [[“a”,“a”,“b”],[“aa”,“b”]]
Example 2:

Input: s = “a”
Output: [[“a”]]

2 回溯

例如s=‘aab’
处理第0个字符a:a是回文吗?是继续处理(第1个字符)
                        aa是回文吗?是,继续处理(第2个字符)
                        aab是回文吗?不是,跳过

处理第1个字符a:a是回文吗?是继续处理(第2个字符)
                        ab是回文吗?不是

一直到最后

class Solution {private List<List<String>> answer;private String s;public List<List<String>> partition(String s) {answer = new ArrayList<List<String>>();this.s = s;dfs(0,new ArrayList<String>());return answer;}private void dfs(int index,List<String> list){if(index>= s.length()){answer.add(new ArrayList<String>(list));return;}for(int i=index+1;i<=s.length();i++){String str = s.substring(index,i);if(isPalindrome(str)){list.add(str);dfs(i,list);list.remove(list.size()-1);}}}private boolean isPalindrome(String s){int i = 0,j = s.length()-1;while(i<j){if(s.charAt(i)!=s.charAt(j)) return false;i++;j--;}return true;}
}

时间复杂度O(n∗n!)O(n*n!)O(nn!),第一个字符有n种可能,第二个字符有n-1种可能,第三个字符n-2种可能,所以是n!。每次判断是否是回文,时间复杂度O(n)。所以总体时间复杂度O(n∗n!)O(n*n!)O(nn!)

3 动态规划

判断是否是回文,可以进一步优化,使用动态规划。这道题目第一次做是2020年5月。还记得当时看到解题答案惊呼原来动态规划初始化还能这么玩!
逻辑是这样的 s=“aab”。
boolean[][] dp,dp[i][j]=true表示下标从i到j的字符串是回文。
对于每个单个字符肯定是回文。所以所有的dp[i][i]=true。
接着处理相邻的,如果s.char(i)=s.charAt(i+1),那么dp[i][i+1]=true。
长度为1,为2的已经处理了。
在这些字符串的基础上左右扩展,如果左右扩展的字符相同,则说明是回文。

class Solution {private List<List<String>> answer;private String s;private boolean[][] dp;public List<List<String>> partition(String s) {answer = new ArrayList<List<String>>();this.s = s;int n = s.length();dp = new boolean[n][n];for(int i=0;i<n;i++){dp[i][i] = true;}for(int i=0;i<n-1;i++){if(s.charAt(i)==s.charAt(i+1)){dp[i][i+1]=true;}}for(int len = 3;len<=n;len++){for(int i=0;i<=n-len;i++){int j = len + i - 1;if(s.charAt(i) == s.charAt(j) && dp[i+1][j-1]){dp[i][j] = true;}}}dfs(0,new ArrayList<String>());return answer;}private void dfs(int index,List<String> list){if(index>= s.length()){answer.add(new ArrayList<String>(list));return;}for(int i=index+1;i<=s.length();i++){String str = s.substring(index,i);if(dp[index][i-1]){list.add(str);dfs(i,list);list.remove(list.size()-1);}}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4 文件操作 支持图片 视频 mp3 文本等

#文件操作:send_file,支持图片 视频 mp3 文本等app.route("/img")def img(): return send_file("1.jpg")转载于:https://www.cnblogs.com/ajaxa/p/11156483.html

我的博客开张了!!!

留个脚印,嘻嘻! 转载于:https://www.cnblogs.com/stu-acer/archive/2006/04/26/385453.html

第一百零五期:5年前,跳槽涨薪,你笑了,5年后,跳槽降薪,你慌了!

去年&#xff0c;我在年度绩效面谈中与某中年技术男就 “从测试转向产品经理” 的这个话题上进行了一些探讨与分析。 作者&#xff1a;王晔倞 图片来自 Pexels 或许是因为分析的角度比较客观、真实&#xff0c;再加上俩人都比较会演戏&#xff0c;我激情&#xff0c;他投入&a…

241. Different Ways to Add Parentheses

文章目录1 题目理解2 分治法1 题目理解 输入&#xff1a;字符串input&#xff0c;包含数字和操作符 规则&#xff1a;给input的不同位置加括号&#xff0c;使得input可以得到不同的计算结果。 输出&#xff1a;返回可能的计算结果 Example 1: Input: “2-1-1” Output: [0, 2…

第一百零六期:长相不讨AI喜欢面试就会挂?全球百万求职者经历AI“看脸”面试

AI不仅会筛选你的简历&#xff0c;还会通过看脸决定你能否通过面试。这不是将来时。全球已有超过一百万求职者&#xff0c;经历过AI面试官的冷酷“凝视”。 作者&#xff1a;鱼羊 本文经AI新媒体量子位&#xff08;公众号ID:QbitAI&#xff09;授权转载&#xff0c;转载请联系…

最近比较忙

最近项目真是忙的可以不过还好前几天没事搞了个电影小偷,闲下来看看电影真是不错站在这里要的回下就可以了http://www.ve99.com 转载于:https://www.cnblogs.com/flashicp/archive/2006/04/29/388972.html

服务器控件HtmlTable下控件赋值问题

在程序开发过程中&#xff0c;碰到这样的问题&#xff1a; 1<table>2<tr>3<td><asp:DropDownList iddropdownlist1 runatserver></td>4</tr>5</table>在基类页中有如下代码&#xff1a;1foreach(Control pagectl inPage.Controls[1]…

Foundry feats. MultiverseStudio

https://www.foundry.com/news-awards/foundry-jcube-announcement 经过这么多年的过程&#xff0c;本周本产品终于发布了PR&#xff0c;这次是由Foundry独家代理销售。 目前本产品已经在全球第一线的工作室的流程内使用&#xff0c;用来装配无法想象巨大的场景&#xff0c;如果…

842. Split Array into Fibonacci Sequence

文章目录1 题目理解2 回溯1 题目理解 输入&#xff1a;一个数字字符串S。例如S“123456579”。 规则&#xff1a;我们可以把这个字符串分割为菲波那切数列&#xff0c;例如&#xff1a;[123, 456, 579]。 一个菲波那切数列需要符合以下条件&#xff1a; 1 0<F[i]<231−1…

第一百零七期:她说,嫁人就选程序员!

又是一年双十一&#xff0c;单身狗们还好吗?想脱单?找个程序猿/程序媛是不错的选择&#xff0c;要不要了解一下? 作者&#xff1a;李二狗 图片来自 Pexels 程序员&#xff0c;已经渐渐成当代相亲市场的一只主力军。甚至可以说是“香饽饽”。 越来越多的妹子&#xff0c;在…

第一百零八期:比较容易理解的Hbase架构全解,10分钟学会,建议收藏

依然是Hadoop组件的讲解&#xff0c;今天说到HBase 架构&#xff0c;都是一字一句打出来的&#xff0c;希望各位转发加关注&#xff0c;会一直给大家写优质的内容。 作者&#xff1a;IT技术管理那些事儿 依然是Hadoop组件的讲解&#xff0c;今天说到HBase 架构&#xff0c;都…

Surface 系统恢复

Surface Pro 6超详细教程之下载Surface 系统恢复镜像并制作系统恢复U盘 https://www.jianshu.com/p/d1b41d913f91 怎样创建Windows 10系统恢复驱动器(U盘) https://jingyan.baidu.com/article/63f236286bd7c90208ab3dd7.html Surface Pro 6超详细教程之恢复Surface Pro6 window…

在Matlab2006a中如何创建.net组件

在Matlab2006a中如何创建.net组件 为了创建一个.NET组件&#xff0c;你必须首先写一个M-Code&#xff08;或者使用已存在的代码&#xff09;然后在MATLAB Builder for .NET中创建一个工程以打包这些代码. 1、编写、调试、保存Matlab代码以便作为.NET组件的基础 2、当你依然在Ma…

315. Count of Smaller Numbers After Self

文章目录1 题目理解2 暴力解法3 分治法1 题目理解 输入&#xff1a;int[] nums 输出&#xff1a;计数的数组int[] counts 规则&#xff1a;counts[i]表示nums中下标大于i&#xff0c;值小于nums[i]的个数 Example 1: Input: nums [5,2,6,1] Output: [2,1,1,0] Explanation: T…

SQL Server执行计划那些事儿(3)——书签查找

接下来的文章是记录自己曾经的盲点&#xff0c;同时也透漏了自己的发展历程&#xff08;可能发展也算不上&#xff0c;只能说是瞎混&#xff09;。当然&#xff0c;一些盲点也在工作和探究过程中慢慢有些眉目&#xff0c;现在也愿意发扬博客园的奉献精神&#xff0c;拿出来和大…

博客堂怎么连个搜索功能都没有

今天想去博客堂搜索下文章看看&#xff0c;结果找了半天&#xff0c;差点把显示器翻过来看也没找到个搜索的功能。是我真的没找到&#xff0c;还是博客堂觉的搜索功能没必要啊??? 转载于:https://www.cnblogs.com/BearsTaR/archive/2006/06/07/419837.html

1218. 最长定差子序列

文章目录1 题目理解2 开始思考1 题目理解 给你一个整数数组 arr 和一个整数 difference&#xff0c;请你找出并返回 arr 中最长等差子序列的长度&#xff0c;该子序列中相邻元素之间的差等于 difference 。 输入&#xff1a;整数数组arr&#xff0c; 整数difference 输出&…

第一百零九期:双十一光棍节调试一个商城必备功能,Java Springboot开源秒杀系统

秒杀系统在电商系统中是非常重要的&#xff0c;不是因为秒杀这个功能重要&#xff0c;而是因为秒杀提现的是一个系统的并发负载能力。例如阿里巴巴或者京东&#xff0c;每年的双十一的峰值&#xff0c;其实就是下一年的常态&#xff0c;双十一各项技术指标&#xff0c;已经作为…

【名额有限】云开发AI拓展能力等你来体验!

这次来了个超厉害的新能力&#xff01; 人脸智能打马赛克、人脸智能裁剪……各种操作&#xff0c;都能一步到位! 迫不及待想体验&#xff0c;戳链接&#xff1a;https://wj.qq.com/s2/3986990/e0ef/ 还没有搞懂&#xff0c;继续往下看—— 基于云开发&#xff0b;AI人脸检测与分…

第一百一十期:详解SpringBoot应用跨域访问解决方案

说到跨域访问&#xff0c;必须先解释一个名词&#xff1a;同源策略。所谓同源策略就是在浏览器端出于安全考量&#xff0c;向服务端发起请求必须满足&#xff1a;协议相同、Host(ip)相同、端口相同的条件&#xff0c;否则访问将被禁止&#xff0c;该访问也就被称为跨域访问。 …