https://leetcode-cn.com/problems/palindrome-partitioning/
class Solution {
private:
vector<vector<int>> f;//类似于KMP的失败函数
vector<vector<string>> ret;//返回的答案
vector<string> ans;//部分答案
int n;//n代表的是一个n的值
public:
void dfs(const string& s, int i){
if(i==n){
ret.push_back(ans);//当已经到达最底层的时候
return;//结束战争
}
for(int j = i; j < n; ++j) {
if (f[i][j]) {
//若当前是回文串,则进行下一轮递归
ans.push_back(s.substr(i, j - i + 1));//将此子串放入答案中,其中substr表示从
//下标为i的地方开始,向后数j-i+1个数字的子串
dfs(s, j + 1);//继续递归
ans.pop_back();//回来之后把最上面的弹出去
}
}
}
vector<vector<string>> partition(string s) {
n = s.size();
f.assign(n, vector<int>(n, true));//初始化全部为true
for (int i = n - 1; i >= 0; --i) {
for (int j = i + 1; j < n; ++j) {
f[i][j] = (s[i] == s[j]) && f[i + 1][j - 1];//动态规划,然后得到所有的dp值
}
}//复杂度为O(n^2)
dfs(s, 0);//深度搜索
return ret;//返回答案
}
};
笑死,看了个别人的博客,倒是没有抄袭我的嫌疑,但是真的有人写了那么多,但是一句都不到重点上,可能看着访客量觉得很有成就感呢。建议还是先学好数据结构再来写这些东西吧,太可笑了。
这个题目更多的是体会KMP的思想,想到了倒是想到了,可惜,不够细致,还是需要更加深入的思考。从前对于数学我总是能够深入思考,并且有自己的想法,这就是数学直觉吧大概,希望26岁之前能做出一点重大的成果。
看看就提交了,毕竟真的没啥好写的。最近先学好概率论再说。看来搞机器学习的不只是我一个人呐。吴恩达的机器学习,真是再适合初学者不过了呢。yygq,浅显易懂是不是该把注意力放在浅显上呢。头有点晕,可能是舟车劳顿。拔完智齿,拆完线。
我又活了。回神过来,可能自己也是某大佬看来的别人的博客吧,算了算了,别装了,别嘲讽别人了,得体一点,对一点。
还有一个简单的题目没有写对,该反思一下,自己的傲慢。所以,既然已经发明了能解决一切问题的机器宇宙机,那么能够通解一样分析所有问题的宇宙脑什么时候能问世呢。