【面试经典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()
相关推荐
虾球xz9 分钟前
游戏引擎学习第197天
java·学习·游戏引擎
唐人街都是苦瓜脸15 分钟前
Java中常见的设计模式
java·开发语言·设计模式
大锦终16 分钟前
【C++】模板进阶
c语言·开发语言·数据结构·c++
你是理想16 分钟前
java基础多态------面试八股文
java·开发语言·面试
我感觉。17 分钟前
Anaconda环境管理及 pycharm、jupyter notebook 的配置
开发语言·pytorch·python·深度学习
向宇it18 分钟前
【unity游戏开发入门到精通——动画篇】Animator反向动力学(IK)
开发语言·unity·c#·编辑器·游戏引擎
returnShitBoy20 分钟前
Swift 的主要特点和优点或缺点是什么?
开发语言·ios·swift
weisian15127 分钟前
Java常用工具算法-6--秘钥托管云服务3--微软zure Key Vault
java·microsoft·安全架构
jianshuilan_061328 分钟前
数组 array
java·开发语言
AI十八式29 分钟前
KDD 2025 顶会最新力作,多变量时间序列预测登顶!
算法·机器学习·支持向量机