zoukankan      html  css  js  c++  java
  • 代码着色

    public int longestPalindrome(String s) {
        //预处理
        char[] chars = s.toCharArray();
        StringJoiner joiner = new StringJoiner("#");
        joiner.add("");
        for (char c : chars) {
            joiner.add(String.valueOf(c));
        }
        joiner.add("");
        String exString = joiner.toString();
        int size = exString.length();
        int[] RL = new int[size];
        int MaxRight = 0, pos = 0, MaxLen = 0;
        for (int i = 0; i < size; i++) {
            if (i < MaxRight) {
                RL[i] = Math.min(RL[2 * pos - i], MaxRight - i);
            } else {
                RL[i] = 1;
            }
            //尝试扩展
            while (i - RL[i] >= 0 && i + RL[i] < size && exString.charAt(i - RL[i]) == exString.charAt(i + RL[i])) {
                RL[i]++;
            }
            //更新MaxRight,pos
            if (RL[i] + i - 1 > MaxRight) {
                MaxRight = RL[i] + i - 1;
                pos = i;
            }
            //更新最大长度
            MaxLen = Math.max(MaxLen, RL[i]);
        }
        return MaxLen - 1;
    }
    public int dpLongestPalindrome(String s) {
        int n = s.length();
        boolean[][] pal = new boolean[n][n];
        //pal[i][j] 表示s[i...j]是否是回文串
        int maxLen = 0;
        for (int i = 0; i < n; i++) {  // i作为终点
            int j = i;    //j作为起点
            while (j >= 0) {
                if (s.charAt(j) == s.charAt(i) && (i - j < 2 || pal[j + 1][i - 1])) {
                    pal[j][i] = true;
                    maxLen = Math.max(maxLen, i - j + 1);
                }
                j--;
            }
        }
        return maxLen;
    }
  • 相关阅读:
    四则运算
    androidstdio导入工程报错
    日程代码任务1
    软件团队模式选择
    初识软件工程
    java数组中最大的子数组之和
    解决键盘布局错误(日文系统)
    固态硬盘的更替
    ZendDebugger的配置
    apache命令行启动
  • 原文地址:https://www.cnblogs.com/skyke/p/7399357.html
Copyright © 2011-2022 走看看