【面试经典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()
相关推荐
一路往蓝-Anbo1 分钟前
C语言从句柄到对象 (八) —— 当对象会说话:观察者模式与事件链表
c语言·开发语言·数据结构·stm32·单片机·观察者模式·链表
oMcLin3 分钟前
Ubuntu 22.04 Docker 容器启动失败:解决 Overlay2 存储驱动冲突
java·ubuntu·docker
GIOTTO情4 分钟前
舆情监测核心模块实战:从基础采集到智能优化
开发语言·python
思成Codes9 分钟前
Golang并发编程——CSP模型
开发语言·后端·golang
csbysj202011 分钟前
Razor C# 循环
开发语言
蕨蕨学AI17 分钟前
【Wolfram语言】35 自然语言理解
开发语言·wolfram
Knight_AL18 分钟前
深入理解Java中的函数式接口
java·开发语言·python
Chen不旧19 分钟前
Java实现三个线程顺序打印
java·开发语言
charlie11451419121 分钟前
FreeRTOS: 信号量(Semaphores)、互斥量(Mutex)与优先级继承
开发语言·笔记·学习·c·freertos·实时操作系统
youngee1136 分钟前
hot100-60子集
数据结构·算法