LeetCode:58 统计最后一个单词的长度

Problem: 58. 最后一个单词的长度

思路

从后向前遍历,进行统计

解题过程

从后向前遍历,进行统计,如果遇到空格,那么说明最后一个单词结束了, 初次想到的是正向遍历,但是需要处理的逻辑很多,比如,第一个单词结束后,还得去考虑第一个单词末尾的空格,如何处理?如果字符串的长度较长,由很多个单词组成,那么逻辑变的非常复杂 所以反向遍历,就变的非常简单,从最后一个单词处理,只需要考虑最后单词是否包含空格,此处需要调用字符串的方法:

以“ Hello World ”为例:

  • 去除开头,结尾的空格:s.trim() 输出为:"Hello World"
  • 去除字符串所有的空格:使用s.replaceAll() 和正则表达式来实现。str.replaceAll("\\s+", ""); 输出为 "HelloWorld!"
  • 只去除开头的空格:java没有直接去除开头的方法,但可以去组合使用 replaceFirst("^\\s+", "") 和正则表达式来实现;输出为:“Hello World ” ;
  • 去除结尾的空格:str.replaceAll("\\s+$", "") ,输出为“ Hello World”

    个人比较推荐使用第一种方法,比较万能

    复杂度

    • 时间复杂度: O(n) 

      运行时间效率击破100%

      Code

      class Solution {
      
          public int lengthOfLastWord(String s) {
      
              int count=0;
      
              String str=s.trim();//去除结尾的空格
      
              for(int i=str.length()-1;i>=0;i--){
      
                  if(str.charAt(i)!=' '){
      
                      count++;
      
                  }else{
      
                      break;
      
                  }
      
              }
      
              return count;
      
              
      
          }
      
      }

      你可能感兴趣的:(算法,LeetCode,算法,java,leetcode)