中级农民
- 积分
- 112
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-3-16
- 最后登录
- 1970-1-1
|
- bool isScramble(string s1, string s2) {
- if(s1==s2)
- return true;
-
- string a = s1, b = s2;
- sort(a.begin(), a.end());
- sort(b.begin(), b.end());
-
- if(a!=b) return false;
-
- for(int i=1; i<s1.length(); i++){
-
- string left = s1.substr(0, i);
- string right = s1.substr(i);
-
-
- string l = s2.substr(0,i);
- string r = s2.substr(i);
-
- if(isScramble(l, left)&&isScramble(r, right))
-
- return true;
-
-
- l = s2.substr(0, right.length()) ;
- r = s2.substr(right.length());
-
-
- if( isScramble(l, right)&&isScramble(r, left))
-
- return true;
-
- }
-
- return false;
-
- }
复制代码
忽略掉前几行的prune部分,我们只看for loop的话,可以发现:
T(n) = T(1)+T(n-1) + T(2)+T(n-2) + ... T(n-1) + T(1)
= 2 (T(1)+T(2)+T(3)+ ... + T(n-1))
稍微变形得到 T(n) = 3T(n-1)
所以可以得出复杂度是O(3^n) |
|