[leetcode] 131.Palindrome Partitioning
2015-07-10 17:29
405 查看
题目:
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”]
]
题意:
给定一个字符串s,对s的划分意思就是s的每一个部分都是回文串。
返回所有的可能的划分。
思路:
要求所有的可能性,那么自然而然的想到了回溯的方法。从下标0开始,0~0只有一个字符,那么是个回文串,递归到从下标1开始往后探查。如果0~k是个回文串,那么下一步的探查是从k+1开始,直到s.length() - 1.
对于当前下标i,一次查看从i~i,直到i~s.length() - 1是不是回文串。如果i~j是回文串的话,把这部分回文串加入结果中,并从j+1开始继续往后探查。回溯可扫描所有的可能情况。
代码如下:
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”]
]
题意:
给定一个字符串s,对s的划分意思就是s的每一个部分都是回文串。
返回所有的可能的划分。
思路:
要求所有的可能性,那么自然而然的想到了回溯的方法。从下标0开始,0~0只有一个字符,那么是个回文串,递归到从下标1开始往后探查。如果0~k是个回文串,那么下一步的探查是从k+1开始,直到s.length() - 1.
对于当前下标i,一次查看从i~i,直到i~s.length() - 1是不是回文串。如果i~j是回文串的话,把这部分回文串加入结果中,并从j+1开始继续往后探查。回溯可扫描所有的可能情况。
代码如下:
class Solution { public: vector<vector<string>> partition(string s) { vector<vector<string>> result; if(s.length() == 0)return result; vector<string> temp; backTracking(result, s, 0, temp); return result; } void backTracking(vector<vector<string>> &result, string &s, int index, vector<string>& temp) { if(index == s.size()) { result.push_back(temp); return; } for(int i = index; i < s.length(); i++) { if(isPalindrome(s, index, i)) { temp.push_back(s.substr(index, i - index + 1)); backTracking(result, s, i + 1, temp); temp.pop_back(); } } } bool isPalindrome(string &s, int start, int end) { while(start < end) { if(s[start] != s[end])return false; start++; end--; } return true; } };
相关文章推荐
- JUnit入门
- ViewAnimator 之(一) ImageSwitcher和TextSwitcher
- 开发者所需要知道的 iOS 9 SDK 新特性
- iOS开发--数据存取
- could not build module 'Foundation' ios QRCodeGenerator libqrencode
- 暑假集训之开始学习
- webView介绍
- 纯虚函数
- Android主线程的消息系统(Handler\Looper)
- 知名互联网公司网站架构图
- 关于 in.readLine() 卡死的有关问题
- 关于MFC中Document, Frame, View以及Document Template结构关系
- 一张图带你回顾希腊债务危机
- NSUserDefaults
- 新手学习编程的最佳方式是什么
- JavaScript清空数组元素的两种方法简单比较
- MongoDB与RDBMS的比较与使用场景
- 动态存储管理
- Call requires API level 11 (current min is 7): android.app.ActionBar#setDisplayShowHomeEnabled
- mysql创建utf-8字符集数据库