Programming Problems/Strings

두개의 스트링이 주어졌을 떄, 불연속적인 섭스트링의 갯수를 구해라

fw93 2018. 4. 22. 20:36

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) 정도가 되지 않을까.