본문 바로가기

Programming/알고리즘 공부

[LeetCode] Length of Last Word | 난이도: Easy

반응형

문제

Given a string s consisting of some words separated by some number of spaces, return the length of the last word in the string.

A word is a maximal substring consisting of non-space characters only.


예시

Example 1:
Input: s = "Hello World"
Output: 5
Explanation: The words are "Hello" and "World", both of length 5.

Example 2:
Input: s = "   fly me   to   the moon  "
Output: 4
Explanation: The longest word is "moon" with length 4.

Example 3:
Input: s = "luffy is still joyboy"
Output: 6
Explanation: The longest word is "joyboy" with length 6.

답안

class Solution {
    public int lengthOfLastWord(String s) {
        
        int cnt = 0;
        boolean hasChar = false;
        
        for(int i = s.length()-1; i>=0; i--){
            if(s.charAt(i)!=' '){
                hasChar = true;
                cnt++;
            }else{
                if(hasChar){
                    return cnt;
                }
            }
        }
        return cnt;
        
    }
}
class Solution {
    public int lengthOfLastWord(String s) {
        
        int cnt = 0;
        
        for(int i = s.length()-1; i>=0; i--){
            if(s.charAt(i) == ' ' && cnt > 0){
                return cnt;
            }else if(s.charAt(i) != ' '){
               cnt++;
            }
        }
        return cnt;
        
    }
}

위 두 코드는 동일한 원리를 적용한다.

반복문을 사용하여 문자열-1 길이만큼 뒤에서부터 공백 및 마지막 문자가 있는지 체크한다.

문자열-1 길이만큼 반복하는 이유는 charAt(i) 메서드로 인덱스 값을 측정할 때 인덱스는 0부터 시작하기 때문에 문자열 길이-1을 해주지 않으면 StringIndexOutOfBoundsException 에러가 발생한다. 누군가에게는 굉장히 기본적인 개념이겠지만, 본인은 아직도 헷갈려서 이렇게 굳이 설명했다.

공백이 있으면 계속 건너뛰다가 문자를 만나면 정수 변수 cnt를 1씩 늘린다. 그리고 문자열이 끝나고 또다시 공백을 만나면 cnt를 리턴한다.

 

class Solution {
    public int lengthOfLastWord(String s) {
        
        String[] strs = s.split("\\s+");
        return strs.length == 0 ? 0 : strs[strs.length - 1].length();
        
    }
}

 

이 코드는 정규표현식을 사용했다. 정규표현식에 대한 정보는 참고 링크를 확인하면 된다.

s.split("\\s+") : 정규식 \s는 공백을 의미한다. + 기호를 붙여서 하나 이상의 공백을 잘라낸다. 이렇게 하면 공백을 기준으로 문자열을 하나씩 자른다.

 

만약 Input: s = "luffy is still joyboy" 이라고 한다면 String[] strs = s.split("\\s+"); 의 결과는

String[] strs = {"luffy", "is", "still", "joyboy"} 형태가 된다. 그리고 배열의 마지막 값(배열 길이 - 1)의 길이를 리턴.


참고

https://beccacatcheserrors.tistory.com/8

 

[코딩연습] Length of Last Word 마지막 단어의 길이 구하기

LeetCode 문제 중 난이도 Easy인 Length of Last Word이다. 문제 링크는 포스팅의 맨 마지막에 추가하였다. 언어는 Java를 사용했다. 문제해석 알파벳 대/소문자 그리고 공백문자로 이루어진 String s에서

beccacatcheserrors.tistory.com

https://leetcode.com/problems/length-of-last-word/

 

Length of Last Word - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions

 

정규 표현식 - JavaScript | MDN

정규 표현식은 문자열에 나타는 특정 문자 조합과 대응시키기 위해 사용되는 패턴입니다. 자바스크립트에서, 정규 표현식 또한 객체입니다.  이 패턴들은 RegExp의 exec 메소드와 test 메소드  ,

developer.mozilla.org

 

반응형