题意整理

  • 输入一个由单词组成的字符串。
  • 输出字符串最后一个单词的长度。

方法一(指针)

1.解题思路

  • 定义一个指针变量。
  • 从后往前遍历字符串,当遇到空格时,用指针记录位置信息,并终止循环。
  • 总长度减去指针到开头一段的长度,即得到最后一个单词的长度。

动图展示: alt

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.复杂度分析

  • 时间复杂度:最坏情况下遍历整个字符串,所以时间复杂度为O(n)O(n)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)

方法二(字符串分割)

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.复杂度分析

  • 时间复杂度:字符串分割需要遍历整个字符串,所以时间复杂度为O(n)O(n)
  • 空间复杂度:最坏情况下需要大小为n-1的字符串数组存储所有的单词,所以空间复杂度为O(n)O(n)