【华为OJ1】字符串最后一个单词的长度

题目描述

计算字符串最后一个单词的长度,单词以空格隔开。


输入描述:

一行字符串,非空,长度小于5000。



输出描述:

整数N,最后一个单词的长度。


输入例子:
hello world

输出例子:

5

解法一:正向思维(比较麻烦)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 是否还有其它的行,一次可以测试多行
        while (scanner.hasNext()) {
            String input = scanner.nextLine();
            System.out.println(getLengthOfLastWord(input));
        }

        scanner.close();
    } 
   public static int getLengthOfLastWord(String str){
	       if(str==null ||str.length()<=0)
	           return 0;
	       char[] strChar=str.toCharArray();
	        int len=strChar.length;
	       char flag=1;
	       char count=0;
       	   //统计空格数,并给空格数做上标记
	       for(int i=0;i<len;i++){
	           if(strChar[i]==' '){
	               strChar[i]=flag++;
	               count++;
	           }
	       }
       		//如果没有空格就直接返回字符串长度
        	if(count==0)
	    	   return len;
       
	       int index=0;
	       for(int i=0;i<len;i++){
               //找到最后一个空格,记下下标index
	           if(strChar[i]==count){
	               index=i;
	               break;
	           }
	       }
	       return len-index-1;
	           
	   }
    
}
解法二:逆向思维(推荐)

import java.util.Scanner;
//有空格的时候:h oj:最后一个字母下标3-第一个空格下标1=2(即为最后一个dancichangdu)
//没有空格的时候:hoj:最后一个字母下标2-第一个空格下标0+1(即为单词的长度,因为此时减了0,所以要加1)
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 是否还有其它的行,一次可以测试多行
        while (scanner.hasNext()) {
            String input = scanner.nextLine();
            System.out.println(getLengthOfLastWord(input));
        }

        scanner.close();
    } 
   public static int getLengthOfLastWord(String str){
	   if(str==null ||str.length()<=0)
	           return 0;
       int len=str.length();
       	   //记录下最后一个字母的位置
       int indexOfLastCharacter=len-1;
       while(indexOfLastCharacter>=0 && str.charAt(indexOfLastCharacter)==' '){
            indexOfLastCharacter--;
       }
         //记录下最后一个空格的位置
       int indexOfLastBlank=0;
       for(int i=len-1;i>=0;i--){
          if(str.charAt(i)==' '){
              indexOfLastBlank=i;
              break;
           }
       }
       if(indexOfLastBlank==0)
          return indexOfLastCharacter-indexOfLastBlank+1;
       
       return indexOfLastCharacter-indexOfLastBlank;
	}
    
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值