[리커우] 58. 마지막 단어 길이의 역순회가 최적의 해인가?

제안이 도착했습니다. 친구를 찾아 픽업하세요! 2022년 봄학기 채용 체크인 이벤트에 참여하고 있습니다. 자세한 이벤트 내용 을 보려면 클릭 하세요 .

봄신병 펀치카드 22일자 30화 기사입니다.

부지런한 공부는 싹이 나서 자라지 아니하나 나날이 자라고, 학교를 그만두는 것은 칼을 갈기 위한 돌과 같아서 잃어도 보지 않고 날마다 잃는다.

너겟을 위한 활동이 너무 많아서 이번 달에는 매일매일 go to brush Questions를 사용하기로 했어요.

갑시다!

주제 설명

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

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

예시

예 1:

입력: s = "Hello World"

출력: 5

설명: 마지막 단어는 "세계"이고 길이는 5입니다.

예 2:

输入: "날 달로 날아가다"

출력: 4

설명: 마지막 단어는 "moon"이며 길이가 4입니다.

예 3:

입력: s = "루피는 여전히 조이보이입니다"

출력: 6

설명: 마지막 단어는 길이 6의 "joyboy"입니다.  

힌트:

1 <= 길이 <= 1 0 4 10^{4}

s는 영문자와 공백으로만 구성됩니다.

s에 적어도 하나의 단어가 있습니다.

주제 분석

  1. 제목 설명을 읽은 후 첫 번째 반응은 공백을 기반으로 문자열을 배열로 분할하는 것입니다.
  2. 배열의 마지막 단어의 길이를 구하는 것이 필요한 길이입니다.
  3. 그러나 위의 방법은 최적의 솔루션이 아니며 마지막 단어의 길이를 찾고자 하므로 反向遍历아이디어 를 사용할 수 있습니다.

아이디어 설명

  1. 질문의 의미에 따르면 문자열에 하나 이상의 단어가 있으므로 문자열에 문자가 있어야 함을 알 수 있습니다.
  2. 먼저 문자열에서 마지막 단어의 마지막 문자인 마지막 문자를 찾습니다.
  3. 공백이 발생하거나 문자열의 시작 부분에 도달할 때까지 마지막 문자에서 시작하여 문자열을 역순으로 계속 탐색합니다.
  4. 횡단한 각 문자는 마지막 단어의 문자이므로 횡단된 문자 수는 마지막 단어의 길이입니다.

AC 코드

func lengthOfLastWord(s string) (ans int) {
    //倒序遍历 获得最大索引位置
    index := len(s) - 1
    for s[index] == ' ' {
        index--
    }
    //倒序索引未跑完并且索引对应的值不是空字符串时
    for index >= 0 && s[index] != ' ' {
        ans++
        index--
    }
    return
}
复制代码

작업 결과

이미지.png

요약하다

복잡성 분석:

시간 복잡도: O(n), 여기서 n은 문자열의 길이입니다.

공간 복잡도: O(1).

소스 설명

출처: LeetCode

링크: leetcode-cn.com/problems/le…

저작권은 링커우 네트워크에 있습니다. 상업적 복제의 경우 공식 허가에 문의하고, 비상업적 복제의 경우 출처를 표시하십시오.

마지막으로

읽어주셔서 감사합니다. 좋아요, 즐겨찾기,동전(집중해)! ! !

8e95dac1fd0b2b1ff51c08757667c47a.gif

рекомендация

отjuejin.im/post/7079210376222474271