每日三题-最长回文子串、搜索二维矩阵II、最长递增子序列

简介: 每日三题-最长回文子串、搜索二维矩阵II、最长递增子序列

最长回文子串


88206b297c214df990edf4dd510a5a05.png

解法一

dp

class Solution {
    public String longestPalindrome(String s) {
        char[] c = s.toCharArray();
        int str = s.length();
        boolean dp[][] = new boolean[str][str];
        // dp[i][j] = c[i]==c[j] && dp[i+1][j-1];
        int left = 0; // 左下标
        int right = 0; // 右下表
        int maxlen = 1; //长度  
        for(int i = 0;i < str;i++){
            dp[i][i] = true;
        }
        for(int len = 2;len <= str;len++){//枚举长度
            for(int i = 0;i < str;i++){//枚举起点
                int j = i+len-1; // j 是终点
                if(j >= str){
                    break;
                }
                if(c[i]==c[j] && (dp[i+1][j-1] || j-i ==1 )){
                    dp[i][j] = true;
                    if(j-i+1 > maxlen){
                        maxlen = j-i+1;
                        left = i;
                        right = j;
                    }
                }
            }
        }        
        return s.substring(left,right+1);
    }
}


搜索二维矩阵II


e2f4ab4f73cf42a4b81cafb0c3ea697a.png

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length;
        int n = matrix[0].length;
        int i = 0;
        int j = n-1;
        while(i < m && j >= 0){
            if(target == matrix[i][j]){
                return true;
            }else if(target > matrix[i][j]){
                i++;
            }else {
                j--;
            }
        }
        return false;
    }
}


最长递增子序列


60a2ae8226ae4aef92bad20480bb0e3a.png

class Solution {
    public int lengthOfLIS(int[] nums) {
        int len = nums.length;
        int dp[] = new int[len];
        int maxans = 0;
        for(int i = 0;i < len;i++){
            for(int j = 0;j < i;j++){
                if(nums[j]<nums[i]) dp[i] = Math.max(dp[i],dp[j]+1);
            }
            maxans =Math.max(dp[i],maxans);
        }
        return maxans+1;
    }
}
相关文章
|
3天前
【题型总结】动态规划之按照某种形式分割数组以获得最值
【题型总结】动态规划之按照某种形式分割数组以获得最值
40 0
|
3天前
|
机器学习/深度学习 算法 测试技术
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
|
3天前
|
算法
|
3天前
|
算法
【Leetcode 74】搜索二维矩阵 —— 二分查找|矩阵
给你一个满足下述两条属性的`m x n`整数矩阵:每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数
|
3天前
|
算法 测试技术 C#
C++前缀和算法:统计美丽子字符串
C++前缀和算法:统计美丽子字符串
|
3天前
|
算法 程序员 索引
【算法训练-动态规划 三】【双序列DP问题】最长重复子数组、最长公共子串、最长公共子序列、编辑距离
【算法训练-动态规划 三】【双序列DP问题】最长重复子数组、最长公共子串、最长公共子序列、编辑距离
70 0
|
8月前
|
算法 Java
【算法题目解析】杨氏矩阵数字查找
一道面试时可能遇到的算法问题,杨氏矩阵。可以重点关注思考方式,而不是死记硬背。
23 0
|
12月前
|
算法 C++
每日算法系列【LeetCode 329】矩阵中的最长递增路径
每日算法系列【LeetCode 329】矩阵中的最长递增路径
|
12月前
|
算法
LeetCode 周赛 347(2023/05/28)二维空间上的 LIS 最长递增子序列问题
这场周赛是 LeetCode 第 347 场单周赛,T4 是结合 LIS 最长递增子序列的动态规划问题。
62 0
|
机器学习/深度学习 算法 测试技术
LeetCode:搜索二维矩阵题解
请写出一个高效的在m*n矩阵中判断目标值是否存在的算法,矩阵具有如下特征: 每一行的数字都从左到右排序 每一行的第一个数字都比上一行最后一个数字大
107 0