• NC17 最长回文子串


    package NC;

    import java.util.Stack;

    /**
    * NC17 最长回文子串
    *
    * 对于一个字符串(仅包含小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。
    *
    * 给定字符串 A 以及它的长度 n ,请返回最长回文子串的长度。
    *
    * 数据范围:
    * 要求:空间复杂度O(1) ,时间复杂度O(n^2)
    * 本题存在空间复杂度O(n) ,时间复杂度O(n) 的解法
    *
    * @author Tang
    * @date 2021/9/30
    */
    public class GetLongestPalindrome {
    char[] chars;

    /**
    * 与某个元素为中心向两边扩散
    * @param index
    * @return
    */
    private int maxCount(int index) {
    int count = 1;

    int leftIndex = index - 1;
    int rightIndex = index + 1;

    //如果index两边与index值都相等的扩散规则
    if(index > 0 && index < chars.length -1 && chars[index - 1] == chars[index] && chars[index+1] == chars[index]) {
    leftIndex = index - 2;
    rightIndex = index + 2;
    count+=2;
    }else if(index > 0 && chars[index] == chars[index - 1]) {
    //如果index和右边相等的扩散规则
    leftIndex = index - 2;
    rightIndex = index + 1;
    count++;
    }else if(index < chars.length -1 && chars[index] == chars[index+1]) {
    //如果index和左边相等的扩散规则
    leftIndex = index - 1;
    rightIndex = index + 2;
    count++;
    }

    //扩散
    while(leftIndex >= 0 && rightIndex <= chars.length - 1 && chars[leftIndex] == chars[rightIndex]) {
    count+=2;
    leftIndex --;
    rightIndex++;
    }
    return count;
    }

    public int getLongestPalindrome(String A, int n) {
    // write code here
    chars = A.toCharArray();

    int max = 0;
    //算出以每个元素为中心的最长回文数
    for(int i = 0; i < chars.length; i++) {
    int count = maxCount(i);
    max = Math.max(max, count);
    }
    return max;

    }

    public static void main(String[] args) {
    String A = "ddbcdddccabbdcdbdbccdaabcdaaaabaadcbadaabdcbaccdabdbccacdddcdcaacdadbacbbccabdabdcddbaacbadacdadbaccbcaadddddddabddbabdaaacdddcd";
    System.out.println(new GetLongestPalindrome().getLongestPalindrome(A,7));

    }


    }
  • 相关阅读:
    PYTHON压平嵌套列表
    linux下IPTABLES配置详解
    Python面试必须要看的15个问题
    两个实用的Python的装饰器
    Python的16个“坑”
    python实现不可修改的常量
    51nod-1322: 关于树的函数
    51nod-1310: Chandrima and XOR
    51nod-1296: 有限制的排列
    51nod-1277: 字符串中的最大值
  • 原文地址:https://www.cnblogs.com/ttaall/p/15357667.html
Copyright © 2020-2023  润新知