题意整理
- 输入一个由单词组成的字符串。
- 输出字符串最后一个单词的长度。
方法一(指针)
1.解题思路
- 定义一个指针变量。
- 从后往前遍历字符串,当遇到空格时,用指针记录位置信息,并终止循环。
- 总长度减去指针到开头一段的长度,即得到最后一个单词的长度。
动图展示:
2.代码实现
import java.util.Scanner;
public class Main{
public static void main(String[] args){
//标准输入
Scanner sc=new Scanner(System.in);
//键盘输入字符串
String s=sc.nextLine();
//定义指针变量
int index=-1;
for(int i=s.length()-1;i>=0;i--){
//从后往前第一个空格的位置
if(s.charAt(i)==' '){
index=i;
break;
}
}
//总长度减去指针到开头一段的长度,即得到最后一个单词的长度
System.out.println(s.length()-index-1);
}
}
3.复杂度分析
- 时间复杂度:最坏情况下遍历整个字符串,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。
方法二(字符串分割)
1.解题思路
- 通过split函数将原字符串分割为字符串数组。
- 字符串数组最后一个元素即是原字符串的最后一个单词,直接输出其长度。
2.代码实现
import java.util.Scanner;
public class Main{
public static void main(String[] args){
//标准输入
Scanner sc=new Scanner(System.in);
//键盘输入字符串
String s=sc.nextLine();
//以空格分割为字符串数组
String[] arr=s.split(" ");
//字符串数组最后一个元素即是原字符串的最后一个单词,直接输出其长度
System.out.println(arr[arr.length-1].length());
}
}
3.复杂度分析
- 时间复杂度:字符串分割需要遍历整个字符串,所以时间复杂度为。
- 空间复杂度:最坏情况下需要大小为n-1的字符串数组存储所有的单词,所以空间复杂度为。