1개의 댓글이 있습니다.
-
-
Being -
http://en.wikipedia.org/wiki/Knuth–Morris–Pratt_algorithm 을 공부해 보세요 :)
14년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
http://en.wikipedia.org/wiki/Knuth–Morris–Pratt_algorithm 을 공부해 보세요 :)
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
sangchu
1.
su = strcat(fa, mo);
for(i = 1, j = size - 1 ; i <= size ; i++, j---)
if(equal(&su[0], &su[i], &su[j])
printf("%d ", i);
2.
for(i = 0 ; i < mo.length() ; i++)
fa.push_back(mo[i]);
for(i = 1 ; i <= fa.length() ; i++) {
if(fa.substr(0, i) == fa.substr(fa.length()-i, fa.length()))
printf("%d ", i);
}
3.
su = strcat(fa, mo);
for(i = 1, j = size - 1 ; i <= size ; i++, j--) {
f.push_back(su[i]);
s.insert(s.begin(), su[j]);
if(f == s)
printf("%d ", i );
}
위의 세가지를 다 써봤는데 시간 초과가 나왔습니다.
기본적으로 앞, 뒤에서 같이 인덱스를 증가하면서 문자열을 비교해
값을 출력하는 방식으로 작성을 했는데요. 일단 루프를 한 번 돌아야
값을 도출할 수 있지 않나요?
가벼운 마음으로 접근했는데, 생각보다 어렵군요. 해결하신 분들은
어떻게 푸셨는지 힌트 부탁드립니다.
14년 전