알고리즘 연습 Lesson 17 - 마지막 단어의 길이

제안이 도착했습니다. 친구를 찾아 픽업하세요! 2022년 봄학기 채용 시리즈 - Swipe 질문 및 펀치 카드 활동에 참여하고 있습니다. 활동 세부 정보 를 보려면 클릭하세요 .

주제

앞뒤에 공백 문자로 구분된 여러 단어로 구성된 문자열 s가 제공됩니다. 문자열에서 마지막 단어의 길이를 반환합니다.

단어는 공백 문자를 포함하지 않고 문자로만 구성된 가장 큰 부분 문자열입니다.

출처: LeetCode 링크: leetcode-cn.com/problems/le… 저작권은 LeetCode.com에 있습니다. 상업적 복제의 경우 공식 허가에 문의하고, 비상업적 복제의 경우 출처를 표시하십시오.

示例 1:

输入:s = "Hello World"
输出:5
解释:最后一个单词是“World”,长度为5。


示例 2:

输入:s = "   fly me   to   the moon  "
输出:4
解释:最后一个单词是“moon”,长度为4。

示例 3:

输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为6的“joyboy”。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/length-of-last-word
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

复制代码

사고 분석

아이디어 1

  • 먼저 문자 trim() 전후의 공백을 제거하십시오.
  • 그런 다음 중간에 문자를 위한 공백으로 자르기를 시작합니다.
  • 잘라낸 배열을 가져오고 길이를 가져옵니다.
  • 길이에서 1을 빼고 배열의 마지막 문자열을 가져옵니다.
  • 길이를 얻기 위해 줄을 자르십시오.

아이디어 2

  • 먼저 문자 trim() 전후의 공백을 제거하십시오. 사실 앞의 공백을 제거할 필요가 없습니다. 우리는 그것을 trimEnd()로 바꿉니다.

아이디어 3

역순회

  • 먼저 문자 앞뒤의 공백을 제거하십시오.
  • 아래 첨자를 통해 값을 얻으므로 문자 길이 -1입니다.
  • 길이를 구한 후 문자 앞뒤의 공백 길이를 제거하기 시작하고,
  • 이제 끝에서 비교 시작, 카운터,
  • 뒤에서 루핑을 시작합니다. 현재 값이 0보다 크고 현재 값이 비어 있지 않으면 카운터가 중첩되고 조건이 충족되지 않으면 값이 반환됩니다.

암호

코드 1

let lengthOfLastWord = function(s) {
  /**
   * 首先去除字符的前后空格 trim()
   * 然后对中间的字符开始以空格切割
   * 拿到切割数组,并获取长度
   * 拿长度减1,拿数组的最后一个字符串
   * 把字符串切割,获取长度
   * 
   * */ 
  let arr = s.trim().split(' ')
  let lastIndex = arr.length - 1
  return arr[lastIndex].split('').length
}
复制代码

코드 2

let arr = s.trimEnd().split(' ')
复制代码

코드 3

/**
   * 首先还是去除字符的前后空格
   * 因为我们是通过下标拿值的,所以就是字符长度-1
   * 拿到长度后,开始去除字符前后的空格长度,
   * 现在开始从最后开始比较,一个计数器,
   * 开始从后边循环,如果当前值大于0,且当前值不等于空,计数器叠加,不满足条件时返回值
   * */ 
  let index = s.length - 1
  console.log(index)
  while (s[index] === ' ') {
    console.log(index)
      index--
  }
  let wordLength = 0
  while (index >= 0 && s[index] !== ' ') {
      wordLength++
      index--
  }
  return wordLength
复制代码

시험 결과

테스트 결과 트림()

이미지.png

테스트 결과 trimEnd()

이미지.png

테스트 결과 - 역순회

이미지.png

추천

출처juejin.im/post/7080144856512741406