[버클 노트 58] 마지막 단어의 길이.

제목.
몇 개의 단어로 구성된 문자열 s 을 드리겠습니다. 단어 사이를 빈칸으로 구분하십시오.문자열의 마지막 단어의 길이를 되돌려줍니다.마지막 단어가 없으면 0을 반환합니다.
단어는 공백이 없는 문자로만 구성된 최대 하위 문자열입니다.
예 1:
  :s = "Hello World"
  :5

예 2:
  :s = " "
  :0

팁:
  • 1 <= s.length <= 104
  • s 영문 및 공백' '으로만 구성
  • 해법 1 (오류)
    생각:
    문자열을 바이트 그룹으로 바꾸어 마지막 자리부터 찾습니다.
    코드:
    func lengthOfLastWord(s string) int {
         
       if s == " " {
         
          return 0
       }
       b := []byte(s)
       for i := len(b) - 1; i >= 0; i-- {
         
          if b[i] == ' ' {
         
             return len(b) - 1 - i
          }
       }
       return len(b) - 1
    }
    

    결과:
    오류에 대한 해답
    입력: "a"
    출력: 0
    예상 결과: 1
    오류 원인:
    전체 문자열에 한 단어만 빈칸이 없을 때, 되돌아오는 결과는 문자열의 길이이지 길이가 1로 줄어드는 것이 아니다.
    해법 2 (오류)
    코드:
    func lengthOfLastWord(s string) int {
         
       if s == " " {
         
          return 0
       }
       b := []byte(s)
       for i := len(b) - 1; i >= 0; i-- {
         
          if b[i] == ' ' {
         
             return len(b) - 1 - i
          }
       }
       return len(b)
    }
    

    결과:
    실행 결과:오류 해결
    입력: "a"
    출력: 0
    예상 결과: 1
    오류 원인:
    테스트 용례”a “에 마지막 빈칸이 있으니 마지막 빈칸을 제외하고 상태기를 사용할 수 있고flag 표시를 설정하면 해결할 수 있습니다.
    해법 3 (정답)
    코드:
    func lengthOfLastWord(s string) int {
         
       if s == " " {
         
          return 0
       }
       var flag bool //” “         
       var blankNum int //      
       b := []byte(s)
       for i := len(b) - 1; i >= 0; i-- {
         
          if b[i] == ' ' {
         
             if flag {
         
                return len(b) - 1 - i - blankNum
             } else {
         
                blankNum++
             }
          } else {
         
             if flag == false {
         
                flag = true
             }
          }
       }//for
       return len(b) - blankNum
    }
    

    결과:
    실행 결과:
    실행 시간: 0ms, 모든 Go 제출에서 100.00%의 사용자를 처치
    메모리 사용량: 2.2MB로 모든 Go 제출에서 24.25%의 사용자를 제쳤다

    좋은 웹페이지 즐겨찾기