문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
만약 일련의 문자열이 "hackerrank" 단어를 철자한다면 문자열이 "hackerrank"를 포함한다고 한다. 서브시퀀스는 시퀀스에서 선택된 문자들의 순서를 유지하는 것을 기억해라.
더 형식적으로 p[0], p[1], ..., p[9]는 문자열 s에 각각 h, a, c, k, e, r, r, a, n, k를 가르킨다. 만약 p[0] < p[1] < p[2] < ... < p[9]가 확실하다면 s는 hackerrank를 포함한다.
각각의 쿼리에 대해, 만약 문자열이 hackerrank를 포함한다면 YES를 출력하고, 그렇지 않으면 NO를 출력해라.
s = haacckkerrannkk
알맞은 정렬에 모든 문자들이 서브시퀀스에 포함한다. YES를 출력한다.
s = haacckkerannk
두 번째 r이 없다. NO를 출력한다.
s = hccaakkerrannkk
c가 아니라 a가 먼저 있어야해서 NO를 출력한다.
hackerrankInString 함수를 완성해라.
hackerrankInString 함수는 아래와 같은 매개변수를 가지고 있다.
hackerrank의 철자 하나씩 문자열 s에 있는지 확인한다. 비교하면서 순서대로 문자가 존재한다면 hackerrank에서 하나씩 이동시킨다.
먼저 hackerrank를 담을 문자열과 인덱스 0을 변수를 선언하고 할당한다.
String h = "hackerrank";
int hIdx = 0;
for문을 사용해서 문자열 s를 순회한다. 순회하면서 hIdx에 해당하는 문자와 s의 문자가 일치하는지 비교하고 일치한다면 hIdx를 증가시킨다. 그리고 hIdx가 9를 넘게 된다면 순서대로 hackerrank가 존재하기 때문에 반복문에서 빠져나온다.
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == h.charAt(hIdx)){
hIdx++;
}
if(hIdx > 9){
break;
}
}
이제 YES 또는 NO를 반환해야하는데, 이때 hIdx가 10보다 작으면 hackerrank가 존재하지 않으므로 NO를 반환하고 아니면 YES를 반환한다.
if(hIdx < 10){
return "NO";
}
return "YES";
public static String hackerrankInString(String s) {
String h = "hackerrank";
int hIdx = 0;
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == h.charAt(hIdx)){
hIdx++;
}
if(hIdx > 9){
break;
}
}
if(hIdx < 10){
return "NO";
}
return "YES";
}