87. Scramble String
2016-07-27 10:44
253 查看
class Solution { public: bool isScramble(string s1, string s2) { if(s1==s2) return true; if(s1.size()!=s2.size())return false; map<char,int> count; for(int i=0;i<s1.size();i++) { count[s1[i]]++; count[s2[i]]--; } for(map<char,int>::iterator it=count.begin();it!=count.end();it++) if(it->second!=0) return false; for(int i=1;i<s1.size();i++) { if(isScramble(s1.substr(0,i),s2.substr(0,i))&&isScramble(s1.substr(i),s2.substr(i))) return true; if(isScramble(s1.substr(0,i),s2.substr(s2.size()-i))&&isScramble(s1.substr(i),s2.substr(0,s2.size()-i))) return true; } return false; }
增加cache 用来记忆s1和s2是否scramble
class Solution { private: map<string,bool> cache; public: bool isScramble(string s1, string s2) { if(s1==s2) return true; if(cache.count(s1+s2))return cache[s1+s2];//在cache中查找是否已经存储了s1和s2的情况 if(s1.size()!=s2.size())return false; map<char,int> count; for(int i=0;i<s1.size();i++) { count[s1[i]]++; count[s2[i]]--; } for(map<char,int>::iterator it=count.begin();it!=count.end();it++) if(it->second!=0) { cache[s1+s2]=false; return false; } for(int i=1;i<s1.size()&&!cache[s1+s2];i++) { if(isScramble(s1.substr(0,i),s2.substr(0,i))&&isScramble(s1.substr(i),s2.substr(i))) { cache[s1+s2]=true; return true; } if(isScramble(s1.substr(0,i),s2.substr(s2.size()-i))&&isScramble(s1.substr(i),s2.substr(0,s2.size()-i))) { cache[s1+s2]=true; return true; } } cache[s1+s2]=false; return false; }
相关文章推荐
- Java中的值传递
- 有序顺序表归并(顺序表做法)
- poj 2299 线段树
- 树和二叉树的一些知识
- nagios系列(六)之nagios实现对服务器cpu温度的监控
- HDU 5761 Rower Bo
- C#往线程里传递参数的方法小结
- 文件搜索命令
- Codeforces Round #219 (Div. 1) A. Counting Kangaroos is Fun 【二分】
- php url重写
- mac下升级ruby环境版本
- 【01】KVM中小企业实践-概述
- 成事不足败事有余的企业QQ
- 服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
- HTTP缓存控制小结
- OC利用ijkplayer框架按照步骤集成实现电视直播
- java 注解 一
- linux 获取某个日期对应的月末日期
- CSU 1100: 一二三
- 车道偏离报警系统