ex) "cat", "catapult"
>> "CATapult", "CatApulT", "CAtapulT"
답 : 3
솔루션 : 우선 바로 떠오르는 방법은 없으니 나이브에서 시작하자. DP로 비벼지는게 보인다 O(MN)으로.
int findall(string & s, string & t, int scurr, int tcurr){
if(tcurr==t.size()) return 1;
// go through starting from scurr
int ret = 0;
for(int i = scurr ; i<s.size() ; i++){
if(s[i]==t[tcurr]){
ret += findall(s,t,i+1,tcurr+1);
}
}
return ret;
}
캐싱을 적용하면 O(MN)으로 하드캐핑 된다. 그리고 내부 시간 복잡도는 최악의 경우 N에 비례하므로 결국 O(MN^2) 정도가 되지 않을까.
'Programming Problems > Strings' 카테고리의 다른 글
n strings를 subsequence로 가지는 가장 lexiographically small한 string (0) | 2018.04.23 |
---|---|
string 앞에다가 최소한의 문자를 더해서 palindrome 만들기. 최소 갯수는? (0) | 2018.04.23 |
k개의 종류로 이루어진 최대 길이 스트링 찾기 Q (0) | 2018.04.22 |
목표 string까지 하나씩 다른 dictionary의 시퀀스 구하기 Q (0) | 2018.04.22 |
문자열의 ?, 0과 1로 치환한 모든 경우의 수 리턴하기 (0) | 2018.04.22 |