- 二维vector的定义:
//m*n的二维vector,两个 "> "之间要有空格
vector<vector > ivec(m ,vector(n,val));
后面的数其实是一个赋值,赋值为一个vector - 动态规划算法,首先确定1,2长度,然后依次3,4,5长度的子串
- 如何处理1,2这种初始条件,需要考虑
- for的执行顺序:
for(表达式1;表达式2;表达式3)
{
表达式4;
}
执行的顺序为:
1)第一次循环,即初始化循环。
首先执行表达式1,再执行表达式2,判断表达式1是否符合表达式2的条件,如果符合,则执行表达式4,否则,停止执行,最后执行表达式3.
2)下次的循环:
首先执行表达式2,判断表达式3是否符合表达式2的条件;如果符合,继续执行表达式4,否则停止执行,最后执行表达式3.
class Solution {
public:
string longestPalindrome(string s) {
int len = s.size();
if(len == 0 || len == 1)
return s;
int maxLen = 1;
int start = 0;
vector<vector<int> > flag(len, vector<int>(len, 0));
for(int i = 0; i < len; i++)
{
flag[i][i] = true;
if(i < len-1 && s[i] == s[i+1])
{
flag[i][i+1] = 1;
start = i;
maxLen = 2;
}
}
for(int length = 2; length < len; length++)
for(int i = 0; i + length < len; i++)
{
if(s[i] == s[i+length] && flag[i+1][i+length-1] == 1)
{
flag[i][i+length] = 1;
maxLen = length+1;
start = i;
}
}
return s.substr(start, maxLen);
}
};