给你一个字符串 s,找到 s 中最长的回文子串。
class Solution {
public:
string longestPalindrome(string s) {
if(s.empty())
return "";
int length = s.size();
if(length == 1)
return s;
vector dp(length, vector(length, false));
string result = "";
for(int i = length - 1; i >= 0; i--)
for(int j = i; j = result.size())
result = s.substr(i, j - i + 1);
}
return result;
}
};
经验: 1、问题拆分为两个部分,一部分是如何确定这个子字符串是回文,另一个问题是考虑长度。拆分开来西靠比较容易解决,并且由于回文字符串的性质可知,同时考虑两边添加元素远比一边添加元素要来的容易。 2、注意:本题DP解法中,遍历顺序是十分考究的,只有解法中的一边++一边–才能够按照要求的顺序更新。 3、C++中二维数组的创建十分容易, vector dp(m, vector(n, a))表示的是初始化一个m行n列的,初始值为a的二维数组。
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径?
class Solution {
public:
int uniquePaths(int m, int n) {
vector dp(m, vector(n, 0));
for(int i = 0; i
关注
打赏
热门博文
- 【Leetcode】剑指Offer 34:二叉树中和为某一值的路径
- 【Leetcode】剑指Offer 33:二叉搜索树的后序遍历序列
- 【Leetcode】剑指Offer 32-III: 从上到下打印二叉树 III
- 【Leetcode】剑指Offer 32-II: 从上到下打印二叉树 II
- 【Leetcode】剑指Offer 32-I:从上到下打印二叉树
- 【Leetcode】剑指Offer 31:栈的压入、弹出序列
- 【Leetcode】剑指Offer 30:包含min函数的栈
- 【Leetcode】剑指Offer 29:顺时针打印矩阵
- 【Leetcode】剑指Offer 28:对称的二叉树
- 【Leetcode】剑指Offer 27:二叉树的镜像