【面试经典150】day 8

#1024程序员节 | 征文#

作为一个未来的程序员,现在我要继续刷题了。

力扣时刻。

目录

1.接雨水

2.罗马数字转整数

3.最后一个单词的长度

4.最长公共前缀

5.反转字符串中的单词

1.接雨水

好好好好好好,一开始就接雨水。我记得接了n次了。。。

痛苦战绩

本题的思路:

对于每个节点,计算0-i的最大值,计算i-n-1的最大值,然后利用(左边最大值,右边最大值)的最小值-高度就是面积了,因为宽度为1.

java 复制代码
class Solution {
    public int trap(int[] height) {
        //左右数组
         int n=height.length;
         int [] left=new int[n];
         left[0]=height[0];
         for(int i=1;i<n;i++){
            left[i]=Math.max(left[i-1],height[i]);
         }
         int [] right=new int[n];
         right[n-1]=height[n-1];
         for(int i=n-2;i>=0;i--){
            right[i]=Math.max(right[i+1],height[i]);
         }
         int ret=0;
         for(int i=0;i<n;i++){
            ret+=(Math.min(left[i],right[i])-height[i]);
         }
         return ret;
    }
}

2.罗马数字转整数

把一个小值放在大值的左边,就是做减法,否则为加法

java 复制代码
class Solution {
    public int romanToInt(String s) {
        int sum=0;
        int preNum=getValue(s.charAt(0));
        for(int i=1;i<s.length();i++){
            int num=getValue(s.charAt(i));
            if(preNum<num){
                sum-=preNum;
            }else{
                sum+=preNum;
            }
            preNum=num;
        }
        sum+=preNum;
        return sum;
    }
    private int getValue(char ch){
        switch(ch){
            case 'I':return 1;
            case 'V':return 5;
            case 'X':return 10;
            case 'L':return 50;
            case 'C':return 100;
            case 'D':return 500;
            case 'M':return 1000;
            default:return 0;
        }
    }
}

3.最后一个单词的长度

先过掉空格,再计算单词。

java 复制代码
class Solution {
    public int lengthOfLastWord(String s) {
        int end=s.length()-1;
        //先过掉空格
        while(end>=0&&s.charAt(end)==' ') end--;
        if(end<0) return 0;
        //过掉单词
        int start=end;
        while(start>=0&&s.charAt(start)!=' ') start--;
        return end-start;
    }
}

4.最长公共前缀

java 复制代码
class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length==0){
            return "";
        }
        String ret=strs[0];
        //遍历字符串数组
        for(int i=1;i<strs.length;i++){
            int j=0;
            //遍历字符串
            for(;j<ret.length()&&j<strs[i].length();j++){
                if(ret.charAt(j)!=strs[i].charAt(j))
                      break; 
            }
            ret=ret.substring(0,j);
            if(ret.equals(""))
                return ret;
        }
        return ret;
    }
}

5.反转字符串中的单词

可变的字符串

java 复制代码
StringBuilder ret=new StringBuilder();

查找某个位置的字符

java 复制代码
s.charAt(i)

分词

java 复制代码
s.substring(i,j)

删除首尾空格

java 复制代码
        //删除首尾空格
        s=s.trim();

转为字符串

java 复制代码
s.toString().trim()
相关推荐
皮皮林5517 小时前
IDEA 源码阅读利器,你居然还不会?
java·intellij idea
卡尔特斯12 小时前
Android Kotlin 项目代理配置【详细步骤(可选)】
android·java·kotlin
白鲸开源12 小时前
Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
java·ubuntu·开源
ytadpole12 小时前
Java 25 新特性 更简洁、更高效、更现代
java·后端
纪莫12 小时前
A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
java·java面试⑧股
JavaGuide13 小时前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户37215742613513 小时前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源13 小时前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
CoovallyAIHub13 小时前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
Java中文社群14 小时前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试