当前位置: 首页 > news >正文

【算法手记9】OR26 最长回文子串 NC369 [NOIP2002 普及组] 过河卒

🦄个人主页:修修修也

🎏所属专栏:刷题

⚙️操作环境:牛客网


一.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];
    }
};

结语

        说点啥好呢...一切都在慢慢向好发展, 坚持下去, 也就最后一两个月时间就可以得到结果了,加油!

http://www.dtcms.com/a/106917.html

相关文章:

  • 2024蓝桥杯国赛真题——数位翻转
  • 网络安全防护与挑战
  • 在uniapp中,video比普通的标签层级高解决问题
  • 项目实战--登录页面
  • 运维培训班之最佳选择(The best Choice for Operation and Maintenance Training Courses)
  • CSP-J/S冲奖第22天:时间复杂度
  • 内网服务器centos7安装jdk17
  • SSM-SpringMVC篇
  • 【JavaSE】String 类
  • 基于Rust与WebAssembly实现高性能前端计算
  • 一套AI训推一体化解决方案约等于100万个应用?
  • new/delete到底做了啥?
  • Python 数据类型 - 集合(set)
  • 【ACM MM 2024】FiLo++实验步骤总结
  • Python网络爬虫:从入门到实践
  • ROS2 高级组件中的webots介绍
  • 合并相同 patient_id 的 JSON 数据为数组
  • 自注意力与交叉注意力的PyTorch 简单实现
  • DAO 类的职责与设计原则
  • 绘制动态甘特图(以流水车间调度为例)
  • JWT(JSON Web Token)
  • Spring AI Alibaba 快速开发生成式 Java AI 应用
  • 每日总结4.2
  • 深入理解Python asyncio:从入门到实战,掌握异步编程精髓
  • 为什么你涨不了粉?赚不到技术圈的钱?
  • 教务系统ER图
  • 大模预测法洛四联症的全方位研究报告
  • 特征融合后通道维度增加,卷积层和线性层两种降维方式
  • Ubuntu交叉编译器工具链安装
  • SpringBoot集成OAuth2.0