IT/알고리즘

substring과 유사한 String 생성자 (LeetCode 2390)

thesse 2023. 9. 12. 17:41
300x250
반응형

https://leetcode.com/problems/removing-stars-from-a-string/description/

 

Removing Stars From a String - LeetCode

Can you solve this real interview question? Removing Stars From a String - You are given a string s, which contains stars *. In one operation, you can: * Choose a star in s. * Remove the closest non-star character to its left, as well as remove the star it

leetcode.com

 

 

 

stack 키워드를 보고 풀기 시작한 문제인데

정작 스택 사용해서 푼 솔루션은 런타임이 좋지 않고

char[] 이용해서 풀었을 때 속도가 잘나왔다. (솔루션 참고)

 

 

 

stack 이용한 풀이

class Solution {
    public String removeStars(String s) {
        Stack<Character> stk = new Stack<>();

        for(char c : s.toCharArray()){
            if(c=='*') stk.pop();
            else stk.push(c);
        }

        char[] ret = new char[stk.size()];
        for(int i=ret.length-1; i>=0; i--){
            ret[i]=stk.pop();
        }

        return String.valueOf(ret);
    }
}

그래프상으로 런타임이 상위권인 것처럼 보이지만 비트는 67%밖에 안됨

 

 

상세보기를 하면 내 앞에 우르르 몰려있다.

 

 

 

 

 

스택 버리고 char[]만 이용해서 풀기

class Solution {
    public String removeStars(String s) {
        char[] ca = s.toCharArray();
        char[] ret = new char[ca.length];
        int reti =0;

        for(int i=0; i<ca.length; i++){
            if(ca[i]=='*'){
                reti--;
            } else {
                ret[reti++]=ca[i];
            }
        }

        return new String(ret, 0, reti);
    }
}

 

 

new String(char[] arr, int a, int b) 이렇게 하면

substring(a, b)와 유사하게 arr에서 a부터 b까지 잘라준다고 함

그러니까 ret 어레이의 길이를 생각할 필요 없이 reti까지 잘라서 리턴하면 됨

300x250
반응형