判断A是不是B的旋转字符串的3种方法
2016-04-28 11:21
295 查看
class Rotation { public: bool chkRotation(string A, int lena, string B, int lenb) { // write code here if(lena != lenb) return true; string C; C = A + A; if(C.find(B,0) != -1) return true; return false; } };
class Rotation { public: bool chkRotation(string A, int lena, string B, int lenb) { // write code here if(lena != lenb) return false; string C = A + A; for(int i = 0; i < lena + lena;i++){ if(C.substr(i,lenb) == B) return true; } return false; } }
kmp匹配
class Rotation { public: bool chkRotation(string A, int lena, string B, int lenb) { // write code here if(lena != lenb) return false; string C = A + A; int next[lenb]; // int *next = new int[lenb]; return kmp(C,B,next); } void makeNext(string B,int next[]){ next[0] = 0; int k = 0; for(unsigned int i = 1; i < B.size();i++){ while(k > 0 && B[i] != B[k]) k = next[k -1]; if(B[i] == B[k]) ++k; next[i] = k; } } bool kmp(string C,string B,int next[]){ makeNext(B,next); unsigned int lengthOfCompare = 0; for(unsigned int i = 0; i < C.size(); ++i){ while(lengthOfCompare > 0 && C[i] != B[lengthOfCompare]) lengthOfCompare = next[lengthOfCompare - 1]; if(B[lengthOfCompare] == C[i]) ++lengthOfCompare; if(lengthOfCompare == B.size()) return true; } return false; } };
相关文章推荐
- 在模板定义语法中关键字class与typename的作用完全一样。
- Python中的exec、eval使用实例
- 线程-synchronized(this)的含义和wait和sleep的区别
- 基础类、二维数组的定义格式、File类
- sql server 2000数据库普通行列转换
- Javascript前台简单验证插件
- Javascript前台简单验证插件2
- 数据库事务的四个基本要素
- httpd 系统错误 无法启动此程序,因为计算机中丢失VCRUNTIME140.dll
- 查看CPU是否支持虚拟化
- 表单form的enctype="multipart/form-data"使用疑惑
- CNMeM is disabled
- 01- Shell脚本学习--入门
- Trie的java实现
- 知道这20个正则表达式,能让你少写1,000行代码
- Linux命令学习之路
- Mycat 数据库分库分表中间件
- 避免表单重复提交 (加一个口令验证码 类似验证码)
- 介绍bigpipe以及在django上的实现,bigpipedjango实现
- EDB数据库创建流程指南