博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Leetcode】【Medium】Palindrome Partitioning
阅读量:4325 次
发布时间:2019-06-06

本文共 1462 字,大约阅读时间需要 4 分钟。

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

Return all possible palindrome partitioning of s.

For example, given s = "aab",

Return

[    ["aa","b"],    ["a","a","b"]  ]

 

解题:

使用深入优先搜索的思想;使用递归;

从头i = 0开始遍历字符串,找到满足要求的回文列,将其放入结果列表中,继续查找下面的回文字符;

 

解题步骤:

1、主函数,建立返回的二维数组,建立存放结果的一维数组,调用递归函数;

2、递归函数,输入为二维数组ret,一维数组path,字符串str,当前检查到的index值:

  (1)如果index值已经等于str的长度,说明搜索完毕,将path插入ret中,返回;

  (2)否则从i从index开始,遍历到str末尾,找index~i范围哪些是回文串:

    a. 将回文串摘出放入path中,更新index,继续递归;

    b. 从path中pop出放入的回文串,继续遍历循环;

3、返回ret

 

代码:

1 class Solution { 2 public: 3     vector
> partition(string s) { 4 vector
> ret; 5 if(s.empty()) 6 return ret; 7 8 vector
path; 9 dfs(ret, path, s, 0);10 11 return ret;12 }13 14 void dfs(vector
>& ret, vector
& path, string& s, int index) {15 if(index == s.size()) {16 ret.push_back(path);17 return;18 }19 20 for(int i = index; i < s.size(); ++i) {21 // find all palindromes begin with index22 if(isPalindrome(s, index, i)) {23 path.push_back(s.substr(index, i - index + 1));24 dfs(ret, path, s, i+1);25 path.pop_back();26 }27 }28 }29 30 bool isPalindrome(const string& s, int start, int end) {31 while(start <= end) {32 if(s[start++] != s[end--])33 return false;34 }35 return true;36 }37 };

 

 

 

转载于:https://www.cnblogs.com/huxiao-tee/p/4777265.html

你可能感兴趣的文章
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
Testing your Xamarin app on Android device
查看>>
丢失控制文件恢复实验记录--4(在线日志文件没有损坏,归档日志丢失,直接重建控制文件(跟踪控制文件trace是旧的情况))...
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
java基础 第十一章(多态、抽象类、接口、包装类、String)
查看>>
Hadoop 服务器配置的副本数量 管不了客户端
查看>>
欧建新之死
查看>>
C程序之修改Windows的控制台颜色(转载)
查看>>
自定义滚动条
查看>>
[QT][待解决问题]对话框ui载入卡顿问题
查看>>
jquery中单选选中及清除选中状态
查看>>
APP开发手记01(app与web的困惑)
查看>>
笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)
查看>>
mysql 日期时间运算函数(转)
查看>>
初识前端作业1
查看>>
为啥程序会有bug?
查看>>
跨域技术
查看>>
JS里的居民们7-对象和数组转换
查看>>