代码随想录算法训练营第五十七天 | 回文序列

● 今日学习的文章链接和视频链接

题目647. 回文子串
题目516. 最长回文子序列

● 看到题目的第一想法

常练常新兄弟们

● 看完代码随想录之后的想法

棒棒

● 实现过程中遇到哪些困难

最长

● 解题代码

  1. 点击查看代码
    class Solution {
        public int countSubstrings(String s) {
    		if(s.length() == 1) return 1;
    		boolean[][] dp = new boolean[s.length()][s.length()];
    		int result = 0;
    		for (int i = 0; i < s.length(); i++) {
    			for (int j = 0; j < s.length(); j++) {
    				dp[i][j] = false;
    			}
    		}
    		for (int i = s.length() - 1; i >= 0 ; i--) {
    			for (int j = i; j < s.length(); j++) {
    				if(s.charAt(i) == s.charAt(j)){
    					if(j - i <= 1){
    						result++;
    						dp[i][j] = true;
    					}else if(dp[i+1][j-1]){
    						result++;
    						dp[i][j] = true;
    					}
    				}
    			}
    		}
    		return  result;
        }
    
    }
    
  2. 点击查看代码
    class Solution {
        public int longestPalindromeSubseq(String s) {
    		int[][] dp = new int[s.length()][s.length()];
    		for (int i = 0; i < s.length(); i++) dp[i][i] = 1;
    		for (int i = s.length() - 1; i >= 0; i--) {
    			for (int j = i + 1; j < s.length(); j++) {
    				if(s.charAt(i) == s.charAt(j)){
    					dp[i][j] = dp[i+1][j-1] + 2;
    				}else{
    					dp[i][j] = Math.max(dp[i+1][j],dp[i][j-1]);
    				}
    			}
    		}
    		return dp[0][s.length()-1];
        }
    }
    

● 今日收获,学习时长

今日收获:回文子串
学习时长:1h
posted @ 2024-01-24 10:06  雨年今天有记录吗  阅读(2)  评论(0)    收藏  举报