day110(3.11)——leetcode面试经典150

63. 不同路径 II

63. 不同路径Ⅱ

题目:

题解:

java 复制代码
class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        if(m==0&&n==0) {
            return 0;
        }
        if(obstacleGrid[0][0]==1) {
            return 0;
        }
        int[][] dp = new int[m][n];
        dp[0][0]=1;
        for(int i=0;i<m;i++) {
            for(int j=0;j<n;j++) {
                if(obstacleGrid[i][j]==1) {
                    continue;
                }
                else if(i==0&&j==0) {
                    continue;
                }
                else if(i==0) {
                    dp[i][j]=dp[i][j-1];
                }
                else if(j==0) {
                    dp[i][j]=dp[i-1][j];
                }
                else {
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];
                }
            }
        }
        return dp[m-1][n-1];
    }
}

5. 最长回文子串

5. 最长回文子串

题目:

题解:

java 复制代码
class Solution {
    public String longestPalindrome(String s) {
        if(s==null || s.length()==0) {
            return "";
        }
        char[] chars = s.toCharArray();
        //记录最大的范围
        int maxStart = 0;
        int maxLen = 0;
        //当前的信息
        int left = 0;
        int right = 0;
        int len=0;
        for(int i=0;i<chars.length;i++) {
            left = i-1;
            right = i+1;
            len = 1;
            while(left>=0&&chars[left]==chars[i]) {
                left--;
                len++;
            }
            while(right<chars.length&&chars[right]==chars[i]) {
                right++;
                len++;
            }
            while(left>=0&&right<chars.length&&chars[right]==chars[left]) {
                left--;
                right++;
                len+=2;
            }
            if(len>maxLen) {
                maxLen=len;
                maxStart=left;
            }
        }
        return s.substring(maxStart+1, maxStart+maxLen+1);
    }
}

优化版:

java 复制代码
class Solution {
    public String longestPalindrome(String s) {
        if(s==null || s.length()==0) {
            return "";
        }
        //用来记录dp[l][r]之间是否为回文子串
        boolean[][] dp = new boolean[s.length()][s.length()];
        //最大的回文长度
        int maxLen = 1;
        //最大的回文子串的start
        int maxStart = 0;
        char[] chars = s.toCharArray();
        for(int i=1;i<chars.length;i++) {
            for(int j=0;j<i;j++) {
                if(chars[i]==chars[j]&&(i-j<=2||dp[j+1][i-1])) {
                   dp[i][j]=true;
                    if(i-j+1>maxLen) {
                        maxLen=i-j+1;
                        maxStart=j;
                    }
                }
            }
        } 
        return s.substring(maxStart, maxStart+maxLen);
    }
}
相关推荐
姗姗的鱼尾喵15 小时前
Java 并发编程高频面试题(含AQS/线程池/锁)
java·经验分享·面试
memcpy015 小时前
LeetCode 3634. 使数组平衡的最少移除数目【排序+滑动窗口】1453
算法·leetcode·职场和发展
苦瓜小生15 小时前
天玑学堂Agent面试总结(一)「持续更新」
面试·职场和发展
aloha_78916 小时前
软考高项-第九章-项目范围管理
面试
We་ct16 小时前
JS核心难点解析:变量提升、作用域、Promise、this与类型转换
开发语言·前端·javascript·面试·作用域·类型转化·变量提升
programhelp_1 天前
SIG 2026 Quant / Susquehanna OA 全攻略
人工智能·机器学习·面试·职场和发展·数据分析
测试19981 天前
使用Python自动化生成接口测试用例
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
小肝一下1 天前
每日两道力扣,day2
c++·算法·leetcode·职场和发展
米粒11 天前
力扣算法刷题 Day 31 (贪心总结)
算法·leetcode·职场和发展
AlenTech1 天前
647. 回文子串 - 力扣(LeetCode)
算法·leetcode·职场和发展