互为旋转词
来源:互联网 发布:某酒店2000w数据 网盘 编辑:程序博客网 时间:2024/06/15 14:08
如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A="12345",A的旋转词有"12345","23451","34512","45123"和"51234"。对于两个字符串A和B,请判断A和B是否互为旋转词。
给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。
比如:
"cdab",4,"abcd",4
返回:true
思路:将两个相同的字符串A合并出一个字符串,那么如果与字符串B是互为旋转词,A必定包含B。
常规解法:
class Rotation {public: bool chkRotation(string A, int lena, string B, int lenb) { if(lena!=lenb) return false; string C=A+A; const char* pC=C.c_str(); const char* pB=B.c_str(); if(NULL==strstr(pC,pB)) return false; else return true; }};
KMP解法:
class Rotation {public: bool chkRotation(string A, int lena, string B, int lenb) { if( A.empty() && B.empty() ) return true; if( A.empty() || B.empty() ) return false; if( lena != lenb ) return false; string AB; AB = A + A; // return strstr(AB.c_str(),B.c_str())==NULL?false:true; int flag = KMP(AB,B); if( flag==1 ) return true; else return false; } int KMP(const string s,const string t) { int slen,tlen; int i,j; int *next = GetNextVal(t,tlen); //slen = strlen(s); for( int x = 0; s[x]!='\0'; x++ ) { slen++; } i = 0; j = 0; while( i<slen && j<tlen ) { if( j==-1 || s[i]==t[j] ) { ++i; ++j; } else { j = next[j]; } } delete[] next; if( j==tlen ) return 1; return 0; } int *GetNextVal(const string s,int &len) { //len = strlen(s); for(int x=0; s[x]!='\0'; x++) { len++; } int *next = new int[len]; int i=0; int j=-1; next[0] = -1; while( i<len-1 ) { if( j==-1 || s[i]==s[j] ) { ++i; ++j; next[i] = j; } else { j = next[j]; } } return next; }};
阅读全文
0 0
- 互为旋转词
- 字符串互为旋转词问题
- 两串旋转 是否互为旋转词
- 判断两个字符串是否互为旋转词
- 判断两个字符串是否互为旋转词
- 判断两个字符串是否互为旋转词
- 判定两个字符串是否互为旋转词
- 判断两个字符串是否互为旋转词
- 判断两个字符串是否互为旋转词
- 字符串是否互为旋转
- 左程云直播8.7-互为变形词、旋转词、manacher算法
- 【字符串】判断两字符串是否互为旋转词?
- 5.4 判断两个字符串是否互为旋转词(find函数)
- 字符串问题---判断两个字符串是否互为旋转词
- C++判断两个字符串是否互为旋转词
- 判断两个字符串是否互为旋转词 Python版
- 互为变形词
- 数组字符串系列之,判断两个字符串互为旋转字符串
- Selenium环境搭建,谷歌浏览器遇到的问题
- 关于@transactional注解的用处与意义
- CSS选择器
- jdbcTemplate返回自定义Bean的列表
- WebView打不开或者显示异常可能原因
- 互为旋转词
- 两栈共享空间
- Java中System.arraycopy方法的使用
- Unicode(UTF-8, UTF-16)令人混淆的概念
- python geopy package(地名获取经纬度)
- redis和mysql的区别
- 锁和监视器
- 小程序-if判断语句/条件判断语句简析 /显示隐藏判断
- CSS三大特性