【面试经典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()
相关推荐
优秀的颜40 分钟前
计算机基础知识(第五篇)
java·开发语言·分布式
BillKu40 分钟前
Java严格模式withResolverStyle解析日期错误及解决方案
java
CodeWithMe41 分钟前
【C/C++】std::vector成员函数清单
开发语言·c++
uyeonashi42 分钟前
【QT控件】输入类控件详解
开发语言·c++·qt
飞川撸码42 分钟前
【LeetCode 热题100】网格路径类 DP 系列题:不同路径 & 最小路径和(力扣62 / 64 )(Go语言版)
算法·leetcode·golang·动态规划
网安INF1 小时前
ElGamal加密算法:离散对数难题的安全基石
java·网络安全·密码学
Neil今天也要学习1 小时前
永磁同步电机参数辨识算法--IPMSM拓展卡尔曼滤波全参数辨识
单片机·嵌入式硬件·算法
yzx9910132 小时前
基于 Q-Learning 算法和 CNN 的强化学习实现方案
人工智能·算法·cnn
iCxhust2 小时前
Prj10--8088单板机C语言8259测试(1)
c语言·开发语言
AWS官方合作商2 小时前
在CSDN发布AWS Proton解决方案:实现云原生应用的标准化部署
java·云原生·aws