🌈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!!!
📚愿大家都能学有所得,功不唐捐!