class Solution {
public String reverseWords(String s) {
StringBuilder sb = new StringBuilder();
s = s.strip();
String[] arr = s.split(" ");
for (int i = arr.length - 1; i >= 0; i--) {
if (arr[i].equals("")) {
continue;
} else {
sb.append(arr[i]);
sb.append(" ");
}
}
return sb.toString().strip();
}
}
불필요한 strip() 중복
s = s.strip(); // 앞뒤 공백 제거
// ...
return sb.toString().strip(); // 또 제거
마지막 공백 처리
정규식 활용 부족
split(" ") // 연속 공백 처리 안 됨
split("\\s+") // 더 안전
class Solution {
public String reverseWords(String s) {
String[] words = s.trim().split("\\s+");
StringBuilder sb = new StringBuilder();
for (int i = words.length - 1; i >= 0; i--) {
sb.append(words[i]);
if (i > 0) {
sb.append(" ");
}
}
return sb.toString();
}
}
class Solution {
public String reverseWords(String s) {
List<String> words = Arrays.asList(s.trim().split("\\s+"));
Collections.reverse(words);
return String.join(" ", words);
}
}
class Solution {
public String reverseWords(String s) {
String[] words = s.trim().split("\\s+");
Stack<String> stack = new Stack<>();
for (String word : words) {
stack.push(word);
}
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty()) {
sb.append(stack.pop());
if (!stack.isEmpty()) {
sb.append(" ");
}
}
return sb.toString();
}
}
| 방법 | 시간 | 공간 | 특징 |
|---|---|---|---|
| 내 코드 | O(n) | O(n) | 동작함 |
| 방법 1 | O(n) | O(n) | 깔끔 |
| 방법 2 | O(n) | O(n) | 가장 간결 |
| 방법 3 | O(n) | O(n) | 명시적 |
class Solution {
public String reverseWords(String s) {
String[] words = s.trim().split("\\s+");
StringBuilder sb = new StringBuilder();
for (int i = words.length - 1; i >= 0; i--) {
sb.append(words[i]);
if (i > 0) {
sb.append(" ");
}
}
return sb.toString();
}
}
개선:
strip() → trim() (관례)split(" ") → split("\\s+") (연속 공백 처리)문자열 단어 역순 = split + 역순 순회
trim(): 앞뒤 공백 제거split("\\s+"): 하나 이상의 공백으로 분리#LeetCode #String #StringBuilder #Split #Medium #정규식