상당히 재밌는 문제를 발견했다. 문제를 읽으면서 어려웠던 점은 이게 왜 interval 문제에 속하지? 에 대한 질문이었는데 자세히 읽다보니 이유를 알 수 있었다. 서로 겹치는 구간에 경우 Bold 태그를 같이 넣어줘야 하는데 이 겹치는 구간을 구하는 것이 interval 문제 핵심인데 생각하기 어려운 문제같다.
자바로 코테를 풀기로 전환하게 되면서 몰랐던 자바 문법을 자주 접하게된다. 이번에 배운건 indexOf() 함수고 문자열이 처음 발생하는 위치를 알려준다. 이 문제에서의 문제 접근 방법은 아래와 같다.
음 다시 풀어도 좀 어려울 것 같은 느낌이 들고. 이번 문제는 답을 참고했기 떄문에 다음에는 혼자서 풀어봐야겠다.
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();
}
}