🦄个人主页:修修修也
🎏所属专栏:刷题
⚙️操作环境:牛客网
一.OR26 最长回文子串
牛客网题目链接(点击即可跳转):OR26 最长回文子串
题目详情:
本题详情如下图:
题目思路:
本题解题思路如下:
本题思路用中心扩展算法,遍历所有字符,将每个字符作为回文串的中心向外扩展,记录下每次拓展的最长的回文串的长度,最后返回最长的回文串长度即可.但是要考虑回文串的长度是奇数还是偶数,如下图所示:
解题代码:
本题解题代码如下:
class Solution { public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param A string字符串 * @return int整型*/int getLongestPalindrome(string A) {// 中心拓展算法int max_len=0;for(int i=0;i<A.size();i++){int left,right;for(int j=0;j<2;j++){left=i-1+j;right=i+1;while(left>=0 && right<A.size() && A[left]==A[right]){left--;right++;}max_len = max(right-left-1,max_len);}}return max_len;} };
二.NC369 [NOIP2002 普及组] 过河卒
牛客网题目链接(点击即可跳转):NC369 [NOIP2002 普及组] 过河卒
题目详情:
本题详情如下图:
题目思路:
本题解题思路如下:
常规二维dp填表可解,状态转换方程为dp[n][m]=dp[n-1][m]+dp[n][m-1];
填表注意下面四种填表特殊情况:如果是马的控制点,那么dp[i][j]=0,如果是首行,那么dp[i][j]=dp[i][j-1],如果是首列,那么dp[i][j]=dp[i-1][j],如果是dp[0][0]则值填1.
特别注意题目给的马的跳跃点方程后面的条件,也是一定要写入判断中的,不能忘了!否则会多错误计算马的跳跃点.
解题代码:
本题解题代码如下
class Solution { public:int crossRiver(int n, int m, int x, int y) {//求dp方程:dp(n,m)=dp(n-1,m)+dp(n,m-1);//填dp表long long dp[20][20]={0};//x+=1;//y+=1;for(int i=0;i<=n;i++){for(int j=0;j<=m;j++){if((i!=x&&j!=y&&(abs(i-x)+abs(j-y))==3) || (i==x&&j==y)){dp[i][j]=0;}else if(i==0 && j==0){dp[i][j]=1;}else if(i==0){dp[i][j]=dp[i][j-1];}else if(j==0){dp[i][j]=dp[i-1][j];}else {dp[i][j]=dp[i][j-1]+dp[i-1][j];}}}return dp[n][m];} };
结语
说点啥好呢...一切都在慢慢向好发展, 坚持下去, 也就最后一两个月时间就可以得到结果了,加油!