최초 풀이(17ms) -> trim, replaceAll(정규식) 사용해서 문자열 앞뒤, 다중 공백 제거
최종 풀이(6ms) -> trim, replaceAll(정규식) 후 문자열 reverse, while문으로 문자열을 훑으면서 공백이 있을 경우 two pointer로 reverse 해준다. solution 풀이 참고해서 품(코드 참고 x)
최초 풀이
class Solution {
public String reverseWords(String s) {
// remove leading, trailing spaces & reduce multiple spaces
s = s.trim().replaceAll(" +", " ");
int start = 0;
int end = s.length() - 1;
String[] sp = s.split(" ");
for(int i = 0; i < sp.length / 2; i++) {
String temp = sp[i];
sp[i] = sp[sp.length - 1 - i];
sp[sp.length - 1 - i] = temp;
}
return String.join(" ", sp);
}
}
최종 풀이
class Solution {
public String reverseWords(String s) {
// remove extra spaces
s = s.trim().replaceAll(" +", " ");
// reverse the entire String
StringBuilder sb = new StringBuilder(s);
s = sb.reverse().toString();
char[] c = s.toCharArray();
int current = 0;
int start = 0;
int end = 0;
// reverse individual words
while(current < c.length) {
while(current < c.length && c[current] != ' ') {
current += 1;
}
end = current - 1;
while(start < end) {
char temp = c[start];
c[start] = c[end];
c[end] = temp;
start++;
end--;
}
current++;
start = current;
}
return new String(c);
}
}
'코딩테스트' 카테고리의 다른 글
[leetcode] 724. Find Pivot Index (1) | 2024.06.09 |
---|---|
[leetcode] 238. Product of Array Except self (1) | 2024.06.09 |
[leetcode] 345. Reverse Vowels (1) | 2024.06.07 |
[leetcode] 739. Daily Temperatures (0) | 2024.06.06 |
[leetcode] 605. Can Place Flowers (0) | 2024.06.06 |