레벨업 일지

[Java] leetcode 2390. Removing Stars From a String 본문

알고리즘/leetcode

[Java] leetcode 2390. Removing Stars From a String

24시간이모자란 2023. 4. 11. 11:58

문제

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

알아야 할 개념

  • String.valueOf 메소드

풀이

풀이는 다음과 같다.

  1. 문자열 s의 문자를 선형탐색하면서 * 기호가 아니면 문자를 추가하고 index +=1 을 수행한다.
  2. * 기호이면 index -=1 을 수행한다.
  3. [0 .. index) 의 문자를 리턴한다.

String.valueOf(char[] data, int offset, int count) 메소드를 사용하면 추가 메모리 할당하지 않는다.

처음에 문자열을 추가 생성하는 코드로 제출했더니 너무 오래 걸려서 잘못 짠 줄 알았다. 자바에서는 문자열 연산할때 StringBuilder 를 사용하거나  String.valueOf 를 사용하면 좋은 성능을 기대할수 있따.

 

처음에 생각한 코드 중 일부

String a = "";
        for(int i =0 ;i < index;i ++){
            a += arr[i];
        }

코드

 

자바

class Solution {
    public String removeStars(String s) {
        char[] arr = s.toCharArray();
        int index = 0;
        if(arr.length ==1 )return s;
        for(int i = 0 ;i < arr.length ;i++){
            if(s.charAt(i) == '*')index --;
            else arr[index++] = s.charAt(i);
        }
        return String.valueOf(arr, 0, index);
    }
}

StringBuilder 사용

class Solution {
    public String removeStars(String s) {
        char[] arr = s.toCharArray();
        int index = 0;
        if (arr.length == 1) return s;
        for (int i = 0; i < arr.length; i++) {
            if (s.charAt(i) == '*') index--;
            else arr[index++] = s.charAt(i);
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < index; i++) {
            sb.append(arr[i]);
        }
        return sb.toString();
    }
}
Comments