zoukankan      html  css  js  c++  java
  • 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));

    }


    }
  • 相关阅读:
    linux内核主要模块图
    Linux0.11内核几种地址(逻辑地址、线性地址、物理地址)的含义
    Linux一个多线程的面试题
    进程的用户栈和内核栈
    Ubuntu 下安装LXR(linux源代码阅读工具)
    Linux多线程与同步
    实模式与保护模式
    Linux下的多线程编程
    寒假Day34:HTML表单+多媒体+框架
    寒假Day34:HDU1514Free Candies记忆化搜索
  • 原文地址:https://www.cnblogs.com/ttaall/p/15357667.html
Copyright © 2011-2022 走看看