zoukankan      html  css  js  c++  java
  • 2020.7.12 5. 最长回文子串

    5. 最长回文子串

    思想:动态规划

    dp[i][j] 表示从 i 到 j 是否为回文子串。

    dp[i][j] = (s[i] == s[j]) && dp[i + 1][j - 1], 即判断s[i]和s[j]是否相等,相等判断i+1到j-1是否为回文子串,若是则 i 到 j 也是回文子串。

    代码实现

    import java.util.*;
    
    public class Solution {
        public String longestPalindrome(String s) {
            int n = s.length();
            boolean[][]dp = new boolean[n][n];
            for (int i = 1; i < n; i++) {
                dp[i][i] = true;
                dp[i][i-1] = true;
            }
            dp[0][0] = true;
            int posx = 0, posy = 0, max = 0;
            for (int j = 1; j < n; j++) {
                for (int i = 0; i < j ; i++) {
                    if(dp[i+1][j-1] && s.charAt(i) == s.charAt(j)){
                        dp[i][j] = true;
                        if (Math.abs(i-j) + 1 > max){
                            max  = Math.abs(i-j) + 1;
                            posx = i;
                            posy = j;
                        }
                    }
                    else dp[i][j] = false;
                }
            }
            return s.substring(posx, posy + 1);
        }
    
        public static void main(String[] args) {
            Solution s = new Solution();
            Scanner in = new Scanner(System.in);
            System.out.println(s.longestPalindrome("cbbd"));
        }
    }

    6. Z 字形变换

    思路:

    public String convert(String s, int numRows) {
            if(s.length() <= 2) return s;
            if(numRows == 1) return s;
    //        List<StringBuffer> list = new ArrayList<>();
            StringBuffer[] stb = new StringBuffer[numRows];
    
            for (int i = 0; i < numRows; i++) {
                stb[i] = new StringBuffer();
            }
            int i = 0, flag = -1;
            for (char op : s.toCharArray()) {
                stb[i].append(op);
                if(i == 0 || numRows - 1 == i) flag = -flag;
                i += flag;
            }
            StringBuffer res = new StringBuffer();
            for (int j = 0; j < numRows; j++) {
                res.append(stb[j]);
            }
            return new String(res);
        }
  • 相关阅读:
    关于两次fork
    阻塞非阻塞与同步异步的区别
    函数调用堆栈
    数组
    64位操作系统与32位操作系统数据类型的字节数
    Redis 键(key)
    Redis 命令
    Redis 安装
    Redis 配置
    MongoDB 安装
  • 原文地址:https://www.cnblogs.com/shish/p/13288945.html
Copyright © 2011-2022 走看看