본문 바로가기
코딩테스트/리트코드LeetCode

[리트코드LeetCode][Easy][JAVA]58. Length of Last Word

by 빔o0O 2024. 9. 21.

 

문제

Given a string s consisting of words and 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 last word is "World" with length 5.

Example 2:

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

Example 3:

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

 

Constraints:

  • 1 <= s.length <= 104
  • s consists of only English letters and spaces ' '.
  • There will be at least one word in s.

 

 

 


 

분석

  1. 단어와 공백(" ")으로 구성된 문자열 s가 주어진다. 문자열의 마지막 단어의 길이를 반환하라.
  2. 마지막 공백의 인덱스를 전체 길이에서 제거하면 마지막 단어의 길이가 나올 듯.

 

 


 

피드백

  1. 처음 제출했을 때 띄어쓰기가 앞뒤 끝에 존재하는 경우에 대한 테스트케이스를 통과하지 못 했다. 양끝 공백제거인 trim을 추가하여 통과. 

 

 


 

답안

class Solution {
    public int lengthOfLastWord(String s) {
        int answer = 0;
        s = s.trim();       // 양끝의 공백은 제거
        answer = s.length() - s.lastIndexOf(" ") - 1;
        return answer;
    }
}

 

 

 


 

다른 사람의 답안

// split을 처음에 생각은 했지만
// 내가 제출한 답안의 방식이 이모저모 더 효율적일 거라고 생각했는데
// 이게 메모리 효율이 아주 약간 더 좋다고 나왔다. 


import java.util.List;
import java.util.ArrayList;

class Solution {
    public int lengthOfLastWord(String s) {
        String semEspaco = s.trim();
        String[] frases = semEspaco.split(" ");

        int result = frases[frases.length-1].length();
        
        return result;
    }
}

 

 

더보기

🤖내 답안(코드A)과 위 코드(코드B)를 챗지가 효율성 측면에서 비교해준 내용

 

메모리 효율 차이

  • 코드 A는 문자열을 한 번 트리밍한 후, 마지막 공백의 위치만 계산하므로 추가적인 배열이나 여러 문자열 객체를 생성하지 않습니다.
  • 코드 B는 문자열을 공백 기준으로 분할하여 배열을 생성하는데, 이로 인해 입력 문자열에 포함된 단어 수만큼 메모리를 추가로 사용하게 됩니다.

결론

따라서 코드 B가 "약간 더 좋은 메모리 효율"이라는 결과가 나온 이유는 특정 상황에서 코드 B의 로직이 더 최적화되었을 가능성이 있거나, JVM의 최적화 과정에서 발생한 결과일 수 있습니다. 그러나 일반적으로는 코드 A가 더 메모리 효율적입니다. 입력 문자열에 공백이 많고, 단어가 적을 경우 코드 A가 특히 더 유리할 것입니다.

 

 

 


 

🔗링크