串的定长顺序存储结构:求串s中出现的第一个最长重复子串及其位置
来源:互联网 发布:unity3d声音不会衰减 编辑:程序博客网 时间:2024/06/06 01:57
假设以定长顺序存储结构表示串,试设计一个算法,求串s中出现的第一个最长重复子串及其位置。
定长顺序串SString的类型定义:
定长顺序串SString的类型定义:
typedef unsigned char SString[MAXSTRLEN+1]; /* s[0] is the string's length */
实现函数如下:
一、普通算法实现,时间复杂度为O(n^3)
void CommonStr(SString s, SString &sub, int &loc)/* 求串s中出现的第一个最长重复子串sub及其位置loc */{//普通算法实现,时间复杂度为O(n^3) int length,max,i,j,k; loc = 0; max = 0; for(i = 0; i < s[0]; ++i){ j = i + 1; while(j <= s[0]){ if(s[i] == s[j]){ //匹配成功,继续查找当前最长重复子串 length = 1; for(k = 1; s[i+k] == s[j+k]; k++)//找到当前最长重复子串 length++; //length当前最长重复子串的长度 if(length >= max){ loc = i; //记录出现第一个最长重复子串的位置 max = length;//记录最长重复子串的长度 } j = j + length; //计数器向后移length个单位 } else j++; //匹配不成功,计数器往后移 } } sub[0] = max; for(i = loc,j =1; i < max; ++i,++j) sub[j] = s[i];}二、KMP算法实现,时间复杂度为O(n^2)
void CommonStr(SString s, SString &sub, int &loc)/* 求串s中出现的第一个最长重复子串sub及其位置loc */{//KMP算法实现,时间复杂度为O(n^2) int next[50]; int i,j,k,len,max; len = 0; max = 0; for(k = 1; k <= s[0]; ++k){ i = k; j = k - 1; next[k] = k - 1; while(i <= s[0]){ if(j == k - 1 || s[i] == s[j]){//模式匹配 ++i;++j; next[i] = j; if(s[i] == s[j]) len = j - k + 1; else len = j - k; } else j = next[j];//模式串向右移 if(len > max){ loc = k; //记录出现第一个最长重复子串的位置 max = len; //记录最长重复子串的长度 } } } sub[0] = max; for(i = loc,j =1; i < max; ++i,++j) sub[j] = s[i];}
0 0
- 串的定长顺序存储结构:求串s中出现的第一个最长重复子串及其位置
- 求串S中出现的第一个最长重复子串及其位置。
- 寻找字符串s中第一个最长的重复子串及其位置
- 求一个串中出现的第一个最长重复子串
- 求一个串中出现的第一个最长重复子串
- 串的定长顺序存储结构:从串s中删除所有和串t相同的子串
- 求一个串中出现的第一个最长可重叠重复子串 [后缀数组解法]
- 求一个串中出现的第一个最长可重叠重复子串 [后缀数组解法]
- 串的定长顺序存储结构
- 串的定长顺序存储结构
- 求字符串中重复出现的最长子串
- 例4.2 求顺序串中出现的第一个最长连续字符
- 串的定长顺序存储
- 求串的第一个最长重复子串的下标和长度
- 串的定长顺序存储结构:实现串的基本操作Replace(&S,T,V)
- (笔试前复习)java-两种方法求第一个最长的可重复子串
- java-两种方法求第一个最长的可重复子串
- 串的定长顺序存储及其应用 C语言
- 华为题目1...2014.5.1
- JNI中cpp调用c文件
- java 多线程开发一
- 海量数据处理:十道面试题与十个海量数据处理方法总结
- java FileStream文件流操作
- 串的定长顺序存储结构:求串s中出现的第一个最长重复子串及其位置
- zigbee术语
- hdu 1159 Common Subsequence
- 合法的内网IP
- 如何将两个APK合并成一个APK
- JAVA中Final的用法
- Leet Code: Single Number II
- 设置UINavigationController的navigationBar标题,实现自定义字体、大小、颜色。
- ERROR: Could not initialize SDL video.问题解决