每日OJ题_牛客_JOR26最长回文子串_C++_Java

目录

牛客_OR26最长回文子串

题目解析

C++代码1

C++代码2

Java代码


牛客_OR26最长回文子串

最长回文子串_牛客题霸_牛客网

描述:

对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。


题目解析

枚举所有的中心点,然后向两边扩散即可,也可用dp解决,回文串类型题目即解析:Offer必备算法21_回文串dp_六道力扣题详解(由易到难)-CSDN博客

C++代码1

dp解法代码:

cpp 复制代码
class Solution {
    public:
    /**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param A string字符串
* @return int整型
*/
    int getLongestPalindrome(string A) {
        // dp[i][j]表示i位置为结尾,最外面的字符是j的回文串?
        // 暴力
        int sz = A.size();
        int ret = 1;
        for(int i = 0; i < sz; ++i)
        {
            int len = 1; // 前面的防止越界不加也过了
            if(i != 0 && i != sz - 1 && A[i - 1] == A[i + 1])
            {
                int left = i - 1, right = i + 1;
                while(left >= 0 && right < sz && A[left--] == A[right++])
                    len += 2;
            }
            // cout << len << endl;
            ret = max(ret, len);
            if(i != 0 && A[i - 1] == A[i])
            {
                len = 0;
                int left = i - 1, right = i;
                while(left >= 0 && right < sz && A[left--] == A[right++])
                    len += 2;
            }
            ret = max(ret, len);
            if(i != sz - 1 && A[i] == A[i + 1])
            {
                len = 0;
                int left = i, right = i + 1;
                while(left >= 0 && right < sz && A[left--] == A[right++])
                    len += 2;
            }
            ret = max(ret, len);
        }
        return ret;
    }
};

C++代码2

中心拓展解法代码:

cpp 复制代码
class Solution
{
    public:
    int getLongestPalindrome(string s)
    {
        int ret = 1, n = s.size();
        for(int i = 1; i < n; i++)
        {
            // 当⻓度是奇数的时候
            int left = i - 1, right = i + 1;
            while(left >= 0 && right < n && s[left] == s[right])
            {
                left--;
                right++;
            }
            ret = max(ret, right - left - 1);
            // 当⻓度是偶数的时候
            left = i - 1, right = i;
            while(left >= 0 && right < n && s[left] == s[right])
            {
                left--;
                right++;
            }
            ret = max(ret, right - left - 1);
        }
        return ret;
    }
};

Java代码

中心拓展解法代码:

cpp 复制代码
import java.util.*;
public class Solution
{
    public int getLongestPalindrome (String s)
    {
        // 中⼼扩展算法
        int n = s.length();
        int ret = 0;
        for(int i = 0; i < n; i++) // 枚举所有的中点
        {
            // 当⻓度为奇数的时候
            int left = i - 1, right = i + 1;
            while(left >= 0 && right < n && s.charAt(left) == s.charAt(right))
            {
                left--;
                right++;
            }
            ret = Math.max(ret, right - left - 1);
            // 当⻓度为偶数的时候
            left = i; right = i + 1;
            while(left >= 0 && right < n && s.charAt(left) == s.charAt(right))
            {
                left--;
                right++;
            }
            ret = Math.max(ret, right - left - 1);
        }
        return ret;
    }
}
相关推荐
JAVA面经实录91715 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
王老师青少年编程16 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮17 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说17 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
许彰午17 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
wuweijianlove18 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung18 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了18 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL18 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化
Bat U18 小时前
JavaEE|多线程初阶(七)
java·开发语言