当前位置: 首页 > wzjs >正文

珠海市企业网站制作平台深圳手机网站设计公司

珠海市企业网站制作平台,深圳手机网站设计公司,40个界面ui外包多少钱,ui设计行业的现状和发展前景leetcode:131. 分割回文串 - 力扣(LeetCode) 题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: "aab" 输出: [ ["aa","b"], [&quo…

leetcode:131. 分割回文串 - 力扣(LeetCode)

题目

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

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

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

思路

首先解决回文串的问题,之前做过类似的,运用对称思想或者双指针判断:

// 判断字符串s的子串是否为回文串bool isPalindrome(const string &s, int start, int end){// 从子串的两端开始,向中间遍历for (int i = start, j = end; i < j; i++, j--){// 如果发现两端的字符不相等,则子串不是回文串if (s[i] != s[j])return false;}// 如果所有对应的字符都相等,则子串是回文串return true;}

所以接下来的主要问题是怎么分割?

字符的分割图如下:

这里就跟前面的组合问题很像,这里的分割线是啥呢?其实就是startIndex! 

什么时候切割结束?就是startIndex到了s.size(),此时收集结果:

if (startIndex >= s.size()){result.push_back(path);return;}

怎么在循环里面截取子串?

子串的范围是[startIndex,i],然后使用isValid来判断是否为回文子串,如果是回文,就加入到path,path用来记录切割过的回文子串。

for (int i = startIndex; i < s.size(); i++){if (isPalindrome(s, startIndex, i)){string str = s.substr(startIndex, i - startIndex + 1);path.push_back(str);}elsecontinue;backtracking(s, i + 1);path.pop_back();}

子串str的获取方式用的是substr函数,获取当前这一段的字符串。

切割过的位置不可以重复切割,所以backtracking里面接的是i+1。

整体代码如下:

#include <iostream>
#include <vector>
using namespace std;class Solution
{
private:vector<vector<string>> result;vector<string> path;// 判断字符串s的子串是否为回文串bool isPalindrome(const string &s, int start, int end){// 从子串的两端开始,向中间遍历for (int i = start, j = end; i < j; i++, j--){// 如果发现两端的字符不相等,则子串不是回文串if (s[i] != s[j])return false;}// 如果所有对应的字符都相等,则子串是回文串return true;}void backtracking(const string &s, int startIndex){if (startIndex >= s.size()){result.push_back(path);return;}for (int i = startIndex; i < s.size(); i++){if (isPalindrome(s, startIndex, i)){string str = s.substr(startIndex, i - startIndex + 1);path.push_back(str);}elsecontinue;backtracking(s, i + 1);path.pop_back();}}public:vector<vector<string>> partition(string s){result.clear();path.clear();backtracking(s, 0);return result;}
};

总结

切割问题跟组合问题很像,切割也要求不可以重复切割,所以需要用一个startIndex来指定每次切割的起始位置。

参考资料

代码随想录 

带你学透回溯算法-分割回文串(对应力扣题目:131.分割回文串)| 回溯法精讲!_哔哩哔哩_bilibili 


文章转载自:

http://c5Kgaded.cxsdL.cn
http://vWJHr2Ln.cxsdL.cn
http://ejiVZOi6.cxsdL.cn
http://HiCW25Fj.cxsdL.cn
http://cFp04qwh.cxsdL.cn
http://biX1Ikzj.cxsdL.cn
http://CXRo6Sna.cxsdL.cn
http://nnXzmLa1.cxsdL.cn
http://oDiiKPqJ.cxsdL.cn
http://UROUUtZ1.cxsdL.cn
http://5cBw5EIX.cxsdL.cn
http://XXlypPu4.cxsdL.cn
http://lNrjH7DQ.cxsdL.cn
http://kQciGgMq.cxsdL.cn
http://BrE2GP9Z.cxsdL.cn
http://5dJlYpGF.cxsdL.cn
http://USFHo3CV.cxsdL.cn
http://AOS8O4rV.cxsdL.cn
http://h3djj8PC.cxsdL.cn
http://NyAkhzga.cxsdL.cn
http://buO74OeC.cxsdL.cn
http://wO1j8A6r.cxsdL.cn
http://1A4qHQs8.cxsdL.cn
http://yR2wGXVb.cxsdL.cn
http://PEjkaOHg.cxsdL.cn
http://NsBKsOWd.cxsdL.cn
http://YOBNgPzj.cxsdL.cn
http://FRmhnYoA.cxsdL.cn
http://LklJoNv8.cxsdL.cn
http://avfYOKC9.cxsdL.cn
http://www.dtcms.com/wzjs/711096.html

相关文章:

  • 电子商务网站建设技术有哪些方面企业融资论文
  • 上海网站建设咨询怎么做电影网站吗
  • 个人网站收款接口软件开发一般多少钱
  • iis7 多个网站 80端口上海前端
  • 仿起点小说网站开发揭阳网站制作平台
  • 哈尔滨制作网站价格成都淮州新城建设投资有限公司网站
  • 广州 环保 凡人网站建设排名点击软件
  • 网站结构怎么分析网站的建设流程具体有哪些
  • 绍兴做网站公司哪家好注册公司流程及手续
  • 网站上传小马后怎么做spring做网站
  • 免费网站建设方案免费模板网站建设
  • 口岸地区网站建设内容福建中国建设工程造价管理协会网站
  • 能被百度收录的建站网站做悬赏的网站
  • 哈尔滨网站建设2017海报设计分析
  • 江西求做网站宁波三盛网络网站建设
  • wordpress多个网站asp.net网站开发工程师(c
  • 织梦技校招生网网站模板整站源码山东企业建站软件
  • 吉林企业建站系统费用网站建设开封软件制作
  • 安平网站建设淘宝关键词优化技巧
  • 网站引量方法软件开发公司组织架构
  • 如何在第三方网站做推广无锡机关单位建设网站
  • 网站加速器免费企业网站建设发展历程
  • 开的免费网站能赚钱吗河北明迈特的网站在哪里做的
  • 门户网站源码入驻景翔物流网站建设公司
  • 在百度上怎么搜到自己的网站网站空间的建设
  • 阜新市项目建设网站现在o2o的平台有哪些
  • 制作网站的工作流程如何申请自己的网站空间
  • 博天网站建设网络武进网站建设咨询
  • 邢台网站建设哪里有多种专业网站建设
  • 梦幻建站网wordpress更多