문제
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.
분석
- 단어와 공백(" ")으로 구성된 문자열 s가 주어진다. 문자열의 마지막 단어의 길이를 반환하라.
- 마지막 공백의 인덱스를 전체 길이에서 제거하면 마지막 단어의 길이가 나올 듯.
피드백
- 처음 제출했을 때 띄어쓰기가 앞뒤 끝에 존재하는 경우에 대한 테스트케이스를 통과하지 못 했다. 양끝 공백제거인 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가 특히 더 유리할 것입니다.
🔗링크
'코딩테스트 > 리트코드LeetCode' 카테고리의 다른 글
[리트코드LeetCode][Easy][JAVA]2769. Find the Maximum Achievable Number (0) | 2024.12.29 |
---|---|
[리트코드][LeetCode][Easy][JAVA]35. Search Insert Position (2) | 2024.09.21 |
[리트코드LeetCode][Easy][JAVA]21. Merge Two Sorted Lists (5) | 2024.09.16 |
[리트코드LeetCode][Easy][JAVA]20. Valid Parentheses (0) | 2024.09.15 |
[리트코드LeetCode][Easy][JAVA][JavaScript]14. Longest Common Prefix (1) | 2024.09.14 |