每日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;
    }
}
相关推荐
不惑_8 分钟前
Redission · 可重入锁(Reentrant Lock)
java·redis·分布式·spring
ziyue757514 分钟前
java将word转pdf
java·pdf·word
努力编程的阿伟15 分钟前
Java多态性:面向对象编程的精髓
java·开发语言
小布-0119 分钟前
Spring BeanUtils.copyProperties实现机制
java·后端·spring
地球空间-技术小鱼22 分钟前
SQL常用语法
java·开发语言·前端
费曼乐园42 分钟前
在 Spring 中不能将 @Value 注解应用于 static 字段的原因
java·spring
一般路过糸.44 分钟前
一文了解构建工具——Maven与Gradle的区别
java·maven
IT德1 小时前
数组增删改查操作
数据结构·算法
BIGSHU09231 小时前
Spring Web是个什么东西
java·前端·spring
OLDERHARD1 小时前
Java - Spring框架 (ios+aop)
java·spring·ios