采用递归求解法,将需要分割的字符串分成“前后”两部分,先对“前半”字符串进行判断,若是回文字符串,则采用递归思想对“后半”字符串进行分割。若“前半”字符串不是回文字符串,则增加其长度,继续判断。直至所有情况均被考虑。
c++代码如下:
class Solution {
public:
/**
*
* @param s string字符串
* @return string字符串vector<vector<>>
*/
vector<vector<string> > partition(string s) {
// write code here
vector<string> strvec;
vector<vector<string>> strvecs;
mypartition(s, &strvec, &strvecs);
return strvecs;
}
void mypartition(string s, vector<string> *strvec, vector<vector<string>> *strvecs) {
int len = s.length();
vector<string> strvectemp;
if (len == 0) {
return;
}
string s_head, s_tail;
strvectemp = *strvec;
for (int len_first_hwstr = 1; len_first_hwstr <= len; len_first_hwstr++) {
(*strvec) = strvectemp;
s_head = s.substr(0, len_first_hwstr);
s_tail = s.substr(len_first_hwstr);
if (ishwstr(s_head)) {
(*strvec).push_back(s_head);
mypartition(s_tail, strvec, strvecs);
}
else {
(*strvec).clear();
continue;
}
if (!(*strvec).empty()) (*strvecs).push_back(((*strvec)));
(*strvec).clear();
}
}
bool ishwstr(string str) {
string strre = myreverse(str);
if (!str.compare(strre))
return true;
else
return false;
}
string myreverse(string str) {
char temp;
int len = str.length();
for (int i = 0; i < len / 2; i++) {
temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
return str;
}
};


京公网安备 11010502036488号