5. 最长回文子串
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200906231227732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjQzNDQz,size_16,color_FFFFFF,t_70#pic_center)
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
if(n==0){
return "";
}
vector<vector<int>>dp(n,vector<int>(n,0));
string res;
int maxlen =1;
int start =0;
for(int i = 0;i<n;i++){
dp[i][i] = 1;
for(int j = 0;j<i;j++){
if(s[i]==s[j] &&((i-j<2) || dp[j+1][i-1]==1)){
dp[j][i] = 1;
}
if(dp[j][i]==1 && maxlen<(i-j+1)){
maxlen = i-j+1;
start = j;
}
}
}
return s.substr(start,maxlen);
}
};
93 DFS/回溯/递归
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200908004727180.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjQzNDQz,size_16,color_FFFFFF,t_70#pic_center)
class Solution {
private:
vector<int>seg = vector<int>(4,-1);
vector<string>res;
public:
void dfs (string& s ,int segId,int segstart)
{
if(segId == 4){
if(segstart == s.size()){
string str = "";
for(int i=0;i<4;i++){
str += to_string(seg[i]);
if(i != 3){
str += '.';
}
}
res.push_back(str);
}
return;
}
if(segstart == s.size()){
return;
}
if(s[segstart] == '0'){
seg[segId] = 0;
dfs(s,segId+1,segstart+1);
}
int addr = 0;
for(int segEnd = segstart;segEnd<s.size();segEnd++){
addr = addr*10+ (s[segEnd]-'0');
if(addr > 0 && addr < 256){
seg[segId] = addr;
dfs(s,segId+1,segEnd+1);
}
else{
break;
}
}
}
vector<string> restoreIpAddresses(string s) {
dfs(s,0,0);
return res;
}
};