코딩테스트

[leetcode] 151. Reverse Words in String

nayoon 2024. 6. 7. 20:49

문제

 

최초 풀이(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