leetcode_2024年5月20日09:56:40

🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。

✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!

🔥个人主页:Ethan Yankang
🔥专栏:面试八股文||Java项目

🔥温馨提示:划到文末发现专栏彩蛋

🔥本篇概览:求字符串最后一个单词的长度


 58.最后一个单词的长度

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

示例 1:

输入:s = "Hello World"
输出:5
解释:最后一个单词是“World”,长度为 5。

示例 2:

输入:s = "   fly me   to   the moon  "
输出:4
解释:最后一个单词是“moon”,长度为 4。

示例 3:

输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为 6 的“joyboy”。

自己题解:

缺陷:没有充分挖掘最后一个单词的题意,这种显然是反向遍历最佳

class Solution {
    public int lengthOfLastWord(String s) {
    int len=s.length();
    int cnt=0;
    int last=0;

    for(int i=0;i<len;i++)
    {
        if(s.charAt(i)!=' ')
        {
            cnt++;
            last=cnt;
        }

//这里只要是出现空格代表断片了,就重新置零。
        else 
        {  
            cnt=0;
        }
    }

    return last; 
    }
}

官方题解:倒序遍历,直接选取第一个完事

总结:要充分挖掘题意,每一个条件都要用上,拆分条件,分而治之,不然就不是最好的方法。

常用函数:charAt(i)=>截取特定下标的字母。

class Solution {
    public int lengthOfLastWord(String s) {
    int len=s.length();
    int cnt=0;
    int last=0;

//注意这里是可以取到0,这和高中的数学方程是一样的,取特值啥的
    for(int i=len-1;i>=0;i--)
    {
        if(s.charAt(i)!=' ')
        {
            cnt++;
            last=cnt;
        }
        else 
        {  
            if(cnt!=0)
            {
                break;
            }
            cnt=0;
        }
    }

    return last;
    }
}

14.最长公共最大前缀

在 Java 中,常用的截取子字符串的方法主要有以下两个:

1. `substring(int beginIndex)`:从指定索引`beginIndex`开始截取到字符串末尾。

2. `substring(int beginIndex, int endIndex)`:从`beginIndex`开始(包含)到`endIndex`结束(不包含)截取子字符串。

自己解法:

class Solution {
    public String longestCommonPrefix(String[] strs) {

        if (strs == null || strs.length == 0) {
            return "";
        }

        int minLen = Integer.MAX_VALUE;
        int i = 0;

        // 先求出最小的长度的值
        for (String str : strs) {
            minLen = Math.min(minLen, str.length());
        }

        for (i = 0; i < minLen; i++) {
            char c = strs[0].charAt(i);

            for (int j = 1; j < strs.length; j++) {
                // 挨个对比字符
                if (strs[j].charAt(i)!= c) {
                    return strs[0].substring(0, i); // 这里返回截止到不匹配位置之前的前缀
                }
            }
        }

        return strs[0].substring(0, i);
    }
}

这里值得记住的:
1、一般这样定义最值变量   int minLen = Integer.MAX_VALUE;

2、字符串截取函数的使用:

                substring(int i) =>表示从i开始截取字符串直至结束 

                substring(int i,int j) =>表示截取i~j之间的字符串

3、数组遍历元素使用:

                 for (String str : strs) {
                            minLen = Math.min(minLen, str.length()) }

官方题解:二分法:

一句话:在最小的子字符串中用二分法进行查找对比即可

能用二分用二分!

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) {
            return "";
        }
        int minLength = Integer.MAX_VALUE;
        for (String str : strs) {
            minLength = Math.min(minLength, str.length());
        }
        int low = 0, high = minLength;

//这一步是关键点,最重要的!
        while (low < high) {
            int mid = (high - low + 1) / 2 + low;
            if (isCommonPrefix(strs, mid)) {
                low = mid;
            } else {
                high = mid - 1;
            }
        }
        return strs[0].substring(0, low);
    }

    public boolean isCommonPrefix(String[] strs, int length) {
        String str0 = strs[0].substring(0, length);
        int count = strs.length;
        for (int i = 1; i < count; i++) {
            String str = strs[i];
            for (int j = 0; j < length; j++) {
                if (str0.charAt(j) != str.charAt(j)) {
                    return false;
                }
            }
        }
        return true;
    }
}



💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖

热门专栏推荐

🌈🌈计算机科学入门系列                     关注走一波💕💕

🌈🌈CSAPP深入理解计算机原理        关注走一波💕💕

🌈🌈微服务项目之黑马头条                 关注走一波💕💕

🌈🌈redis深度项目之黑马点评            关注走一波💕💕

🌈🌈Java面试八股文系列专栏            关注走一波💕💕

🌈🌈算法leetcode+剑指offer              关注走一波💕💕


总栏

🌈🌈​​​​​​JAVA后端技术栈                          关注走一波💕💕  

🌈🌈JAVA面试八股文​​​​​​                          关注走一波💕💕  

🌈🌈JAVA项目(含源码深度剖析)    关注走一波💕💕  

🌈🌈计算机四件套                               关注走一波💕💕  

🌈🌈算法                                        ​​​​​​     ​关注走一波💕💕  

🌈🌈必知必会工具集                           关注走一波💕💕

🌈🌈书籍网课笔记汇总                       关注走一波💕💕  

🌈🌈考试复习资料                              关注走一波💕💕  

🌈🌈C/C++技术栈                              关注走一波💕💕  

🌈🌈GO技术栈                                   关注走一波💕💕  


分栏

🌈🌈JAVA后端技术栈

🌈🌈spring                                      关注走一波💕💕         ​

🌈🌈redis                                        关注走一波💕💕

🌈🌈MySQL                               ​​​     关注走一波💕💕 

🌈🌈mybatis        ​​​​​​​        ​​​​​​​        ​​​​     ​​​​      关注走一波💕💕

🌈🌈mybatisplus                           关注走一波💕💕

🌈🌈MQ          ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        关注走一波💕💕

🌈🌈微服务                                     关注走一波💕💕

🌈🌈设计模式                                 关注走一波💕💕

🌈🌈分布式锁                                 关注走一波💕💕


🌈🌈JAVA八股文​​​​​​​​​​​​​​​​​​​​​JAVA面试八股文(redis、MySQL、框架、微服务、MQ、JVM、设计模式、并发编程、JAVA集合、常见技术场景)                                                          关注走一波💕💕    

                                                             


🌈🌈JAVA项目(含源码深度剖析)

🌈🌈黑马头条(微服务)             关注走一波💕💕

🌈🌈黑马点评(redis)               关注走一波💕💕


🌈🌈计算机四件套

🌈🌈计算机基础                           关注走一波💕💕

🌈🌈计算机基础                           关注走一波💕💕

🌈🌈计算机网络                           关注走一波💕💕

🌈🌈数据结构与算法                    关注走一波💕💕


🌈🌈算法

🌈🌈leetcode                              关注走一波💕💕

🌈🌈剑指offer                             关注走一波💕💕


🌈🌈必知必会工具集                   关注走一波💕💕


🌈🌈书籍网课笔记汇总

🌈🌈CSAPP笔记                        关注走一波💕💕

🌈🌈计算机科学速成课               关注走一波💕💕

🌈🌈CS自学指南                        关注走一波💕💕

🌈🌈读书笔记与每日记录           关注走一波💕💕


🌈🌈考试复习资料​​​​​​​                      关注走一波💕💕


🌈🌈C/C++技术栈                      关注走一波💕💕                           


🌈🌈GO技术栈                          关注走一波💕💕                                                    


📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值