[Hackerrank] Strings - DuplicateWords 풀이
예문
https://www.hackerrank.com/challenges/duplicate-word/problem
Sample Input
5
Goodbye bye bye world world world
Sam went went to to to his business
Reya is is the the best player in eye eye game
in inthe
Hello hello Ab aB
Sample Output
Goodbye bye world
Sam went to his business
Reya is the best player in eye game
in inthe
Hello Ab
해석
- 중복단어 제거
풀이
- 정규식 \b(\w+)(\W+\1\b)+ 사용
- 공백이 여러개 있을 경우 한번만 나타냄. 단어 경계로 끊음
- \w : [a-zA-Z0-9]의 줄임 표현
- \W : [^a-za-z0-9] 영문자와 숫자만 아니면 됨.
- \b : 단어 경계
- \1 : 첫번째 괄호(\w+) 그룹과 일치하는 항목
- + : 바로 앞의 문자가 하나 이상
제약사항
- 1 <= n <= 100
코드
public String solution(String input){
String regex = "\\b(\\w+)(\\W+\\1\\b)+";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
while (m.find()) {
input = input.replaceAll(m.group(), m.group(1)); //전체 일치 항목 중에 첫번째 일치하는 것으로 바꿔줌
}
System.out.println(input);
return input;
}