java字符串练习题6、最后一个单词的长度
题目:
给你一个字符串 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”。
提示:
1 <= s.length <= 10000
s 仅有英文字母和空格 ' ' 组成
s 中至少存在一个单词
题解:
这个题的解法很多,我们先使用一个最简单的方法来解题,我们在之前的String字符串函数中学了一个函数叫做split,这个函数能将英文语句通过空格的方式都拆分出来,他并没有说最后一个结尾是否是符号,所以我们就直接当做一个单词来处理。
这里拆分后我获取到最后一个元素,直接输出长度即可,还是很方便的。相对效率还可以。
方法1:使用split
package com.item.actoin; import java.util.Scanner; public class Demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); sc.close(); String[] arr = s.split(" "); System.out.println(arr[arr.length-1].length()); } }
想到以上的方法肯定能想到这个方法,这个就是直接获取到最后一个单词来处理。
方法2:使用lastIndexOf
package com.item.actoin; import java.util.Scanner; public class Demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); sc.close(); String trim = s.trim(); int index = trim.lastIndexOf(" "); System.out.println(trim.length()-index-1); } }
方法3:夹逼法
还是使用夹逼法,先找到最后一个单词,再根据最后一个单词的下标向左找,只要是空格就结束即可,通过结尾-起始的方式就能计算出长度了,这个效率稍微高一些。
package com.item.actoin; import java.util.Scanner; public class Demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); sc.close(); //直接获取下标最大值 int end = s.length() - 1; //找到最后一个不等于空格的字符下标 while (end >= 0 && s.charAt(end) == ' ') { end--; } //如果没有就算了。 if (end < 0) { System.out.println(0); return; } //从结束点是向前找起始点 int start = end; //只要不是空格就算是单词部分 while (start >= 0 && s.charAt(start) != ' ') { start--; } System.out.println(end - start); } }