week14
131 - 分割回文串
class Solution {
public:
int n;
vector<vector<string>> res;
vector<vector<bool>> f;
vector<string> path;
public:
vector<vector<string>> partition(string s) {
n = s.size();
f = vector<vector<bool>>(n, vector<bool>(n));
// 注意这里的枚举顺序
for(int j = 0; j < n; j++)
for(int i = 0; i <= j; i++)
{
if (i == j)
f[i][j] = true; // 只有一个字母
else if (s[i] == s[j])
{
if (i + 1 > j - 1 || f[i + 1][j - 1]) // 只有两个字母 或者 f[i+1][j-1]为true
f[i][j] = true;
}
}
dfs(s, 0);
return res;
}
void dfs(string& s, int u)
{
if(u == n) res.push_back(path);
else
{
for(int i = u; i < n; i++)
{
if(f[u][i])
{
path.push_back(s.substr(u, i - u + 1));
dfs(s, i + 1);
path.pop_back();
}
}
}
}
};132 - 分割回文串ii
133 - 克隆图
134 - 加油站
135 - 分发糖果

136 - 只出现一次的数字
137 - 只出现一次的数字ii

138 - 复制带随机指针的链表

139 - 单词拆分
140 - 单词拆分ii
Last updated