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);
    }
}
相关推荐
前端那点事2 小时前
Vue批量文件上传并发踩坑指南:3步解决阻塞、限流、进度混乱
前端·面试
布吉岛的石头2 小时前
Java 中高级面试:JVM 内存模型 + GC 算法高频题总结
java·jvm·面试
待bong3 小时前
蓝桥杯EDA客观题(自己收集的)
职场和发展·蓝桥杯
pqq的迷弟3 小时前
面试整理:HashMap\ConcurrentHashMap原来
java·面试·职场和发展
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题】【Java基础篇】第19题:HashMap的key如何减少发生哈希冲突
java·开发语言·后端·面试·哈希算法·hash-index·hash
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题】【Java基础篇】第18题:HashMap底层是如何扩容的
java·开发语言·面试·散列表·hash-index·hash
玛丽莲茼蒿5 小时前
Leetcode hot100 多数元素【简单】
算法·leetcode·职场和发展
_深海凉_5 小时前
LeetCode热题100-杨辉三角
算法·leetcode·职场和发展
ShineWinsu5 小时前
对于Linux:进程间通信IPC(匿名管道)的解析
linux·c++·面试·进程·通信·管道·ipc