Skip to content

58、最后一个单词的长度

js
;(function () {
  /**
   * 58. 最后一个单词的长度
   * 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
   * 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
   *
   * 输入:s = "Hello World"
   * 输出:5
   * 解释:最后一个单词是“World”,长度为5。
   *
   * 输入:s = "   fly me   to   the moon  "
   * 输出:4
   * 解释:最后一个单词是“moon”,长度为4。
   *
   * 输入:s = "luffy is still joyboy"
   * 输出:6
   * 解释:最后一个单词是长度为6的“joyboy”。
   *
   */

  function lengthOfLastWord(s: string): number {
    // 方法一:
    // if (s === null || s.length === 0) {
    //     return 0
    // }
    // let strArr: string[] = s.split(' ')
    // let filterArr = strArr.filter(item => item)
    // if (filterArr && filterArr.length > 0) {
    //     return filterArr[filterArr.length - 1].length
    // }
    // return 0

    // 方法二:双指针
    // if (s === null || s.length === 0) {
    //     return 0
    // }
    // let len = s.length;
    // let left = len - 1;
    // let right = len - 1;
    // let isGetRight: boolean = false;
    // let isGetLeft: boolean = false;
    // for (let i = len - 1; i >= 0; i--) {
    //     if (s.charAt(i) === ' ') {
    //         if (isGetLeft) {
    //             break;
    //         }
    //         left > 0 && left--;
    //         !isGetRight && right--;
    //     } else {
    //         // 如果两个指针在同一个位置,且当前字符不为空,则表示找到单词的最右侧
    //         if (left === right) {
    //             isGetRight = true;
    //             !isGetRight && (right = i);
    //             isGetLeft = true;
    //             !isGetLeft && (left = i);
    //         }
    //         left >= 0 && left--;
    //     }
    // }
    // // console.log(left, right, s[left], s[right])
    // return right !== left ? right - left : right + 1

    // 方法三: 反向遍历(官网提供)
    let index = s.length - 1
    while (s[index] === ' ') {
      index--
    }
    let wordLen = 0
    while (index >= 0 && s[index] !== ' ') {
      wordLen++
      index--
    }
    return wordLen
  }

  let s = '   fly me   to   the moon  '
  let s1 = 'Hello World'
  let s2 = 'luffy is still joyboy'
  let s3 = ' a  '
  let s4 = 'a'
  let s5 = 'b a '
  let s6 = 'day'
  console.log(lengthOfLastWord(s))
  console.log(lengthOfLastWord(s1))
  console.log(lengthOfLastWord(s2))
  console.log(lengthOfLastWord(s3))
  console.log(lengthOfLastWord(s4))
  console.log(lengthOfLastWord(s5))
  console.log(lengthOfLastWord(s6))
})()