Add Bold Tag in String

유승선 ·2024년 12월 15일
0

LeetCode

목록 보기
122/122

상당히 재밌는 문제를 발견했다. 문제를 읽으면서 어려웠던 점은 이게 왜 interval 문제에 속하지? 에 대한 질문이었는데 자세히 읽다보니 이유를 알 수 있었다. 서로 겹치는 구간에 경우 Bold 태그를 같이 넣어줘야 하는데 이 겹치는 구간을 구하는 것이 interval 문제 핵심인데 생각하기 어려운 문제같다.

자바로 코테를 풀기로 전환하게 되면서 몰랐던 자바 문법을 자주 접하게된다. 이번에 배운건 indexOf() 함수고 문자열이 처음 발생하는 위치를 알려준다. 이 문제에서의 문제 접근 방법은 아래와 같다.

  1. words 안에 있는 문자열이 위치한 곳을 bold 태그로 남겨둘 위치로 마크해두는 것
  2. bold 태그의 배열을 읽어서 시작하는 위치와 끝나는 위치를 정확히 체크해서 문자열을 더 해주는것.

음 다시 풀어도 좀 어려울 것 같은 느낌이 들고. 이번 문제는 답을 참고했기 떄문에 다음에는 혼자서 풀어봐야겠다.


class Solution {
    public String addBoldTag(String s, String[] words) {
         int n = s.length(); 
         boolean[] bold = new boolean[n]; 

         for(String word : words){
            int start = s.indexOf(word); 
            while(start != -1){
                for(int i = start; i < start + word.length(); i++){
                    bold[i] = true; 
                }
                start = s.indexOf(word,start+1); 
            }
         }

         String openTag = "<b>"; 
         String closeTag = "</b>"; 
         StringBuilder ans = new StringBuilder(); 

         for(int i = 0; i < n; i++){
            if(bold[i] && (i == 0 || !bold[i-1])){
                ans.append(openTag); 
            }

            ans.append(s.charAt(i)); 

            if(bold[i] && (i == n - 1 || !bold[i+1])){
                ans.append(closeTag); 
            }
         }

         return ans.toString(); 
    }
}
profile
성장하는 사람

0개의 댓글