包头网站建设熊掌号,营销机构代码怎么填,wordpress 添加文件权限,门户网站建设摘要题目#xff1a;给定两个字符串s1和s2#xff0c;要求判定s2是否能够被s1做循环移位得到的字符串包含。例如#xff0c;给定s1AABCD和s2CDAA,返回true;给定s1ABCD和s2ACBD,返回false。 答#xff1a; #include stdafx.h
#include iostreamusing namesp…题目给定两个字符串s1和s2要求判定s2是否能够被s1做循环移位得到的字符串包含。例如给定s1AABCD和s2CDAA,返回true;给定s1ABCD和s2ACBD,返回false。 答 #include stdafx.h
#include iostreamusing namespace std;//获取next数组的值
void GetNext(const char* pattern, int length, int *next)
{int i 0;next[i] -1;int j -1;while (i length - 1){if (-1 j || pattern[i] pattern[j]){i;j;if (pattern[i] ! pattern[j]){next[i] j;}else{next[i] next[j];}}else{j next[j];}}
}//KMP算法
bool KMP(const char *src, int slength, const char * pattern, int plength, int *next)
{int i 0;int j 0;while (i slength j plength){if (-1 j || src[i] pattern[j]){i;j;}else{j next[j];}}if (j plength){return true;}return false;
}int _tmain(int argc, _TCHAR* argv[])
{char src[] AABCD;char pattern[] CDAA;int slength strlen(src);int plength strlen(pattern);char *psrc new char[slength * 2 1];strcpy(psrc, src);strcat(psrc, src);*(psrc slength * 2) \0;int *next new int[plength];GetNext(pattern, plength, next);if (KMP(psrc, slength * 2, pattern, plength, next)){cout字符串src循环移位可以得到patternendl;}else{cout字符串src循环移位得不到patternendl;}delete [] psrc;coutendl;return 0;
} 运行界面如下 转载于:https://www.cnblogs.com/venow/archive/2012/09/03/2668295.html