查找一个字符串中最大重复子串(C语言版)
来源:互联网 发布:费正清 中国新史 知乎 编辑:程序博客网 时间:2024/05/20 09:09
#include <stdio.h>
#include <string.h>
/* 找出一个字符串最大相同子串,如果有多个重复子串,则要求返回最后一个位置的子串
*/
void print_sub(char *p, int len)
{
int save_len = len;
while(len && len--)
{
printf("%c ", *p++);
}
printf("(%d bytes)\n", save_len);
}
/* 从from开始长度为len的字符串定义为一个子串(from是固定的)
** 则把从to开始,找出是否含有该子串
** 返回最后一个指定长度的子串的位置
** 限定:字符串从左边开始处理,from必需比to小,且没有重叠
*/
const char * search_sub_str(const char * from, const char * to, int len)
{
const char * same_sub_str = NULL;
if((from + len - 1 >= to)||(from > to))
{
printf("check failed in %s\n", __FUNCTION__);
return NULL;
}
while(*to)
{
if(!strncmp(from, to, len))
{
same_sub_str = to;/* 找到最后一个相同子串 */
}
to++;
}
return same_sub_str;
}
int max_sub_str(const char * str, char **p)
{
const char * s;
char * result;
/* 假定用户传递的合格字符串 */
int len = strlen(str);
int find_len = 0;
int sub_len, max = 0;
int i;
//printf("len = %d\n", len);
for(i = 0; i < len; i++)
{
sub_len = 1;
s = str + i;
while(sub_len <= len/2)
{
/* 针对特定的sub_len长度找出最后一个子串,已经有一个循环 */
//if((s + sub_len*2) <= str + len)
result =(char *)search_sub_str(s, s + sub_len, sub_len);
if(result && max < sub_len)/* *p非空表示找到,并且需要更新找到的最大子串长度 */
{
*p = result;
find_len = sub_len;
max = sub_len;
}
sub_len++;
}
}
return find_len;
}
/*
** test case :
1
11
abcdabcd
dafabcdesdfdabcde
111111111111111
1111111111111111
dsjfaworjenafjadsjqwoperjewiorjioqwejrewfddfdfewqrewfd
dsjfaworjenafjadsjqwoperjewiorjioqwejrewfddfdfewqrewfdxxxrewfd
*/
int main()
{
char * p = NULL;
char str[1000] = {};
int len;
printf("Please input a string:\n");
if(gets(str) != NULL)
{
//printf("string start address is %p\n", str);
len = max_sub_str(str, &p);
//printf("find %p len =%d at last\n", p, len);
if(p)
{
printf("max sub string:\n");
print_sub(p, len);
printf("pos is %d\n", p - str + 1);
}
else
printf("no max repeat sub string!\n");
}
return 0;
}
- 查找一个字符串中最大重复子串(C语言版)
- C语言版字符串查找函数,字符串中查找子串
- 查找字符串中字符不重复的最大子串(C/C++)
- 在一个字符串中找一个最大重复子串
- 在一个字符串中找一个最大重复子串
- 查找一个字符串中最大长度的重复子串,例如abcdab 中ab为最大重复字串 长度为2
- java 在一个字符串中查找最大对称子串
- 《算法导论》-最大公共子串(连续) C语言版
- 求一个字符串中的最大连续重复子串
- 得到一个字符串最大无重复子串长度
- 查找一个字符串中两个相同的最大的子串
- c语言:查找两个字符串的最大公共子串
- 字符串中没有重复的字符最大子串
- 在字符串中查找最长重复子串的探讨
- 在字符串中查找最长重复子串
- 查找字符串中最长无重复字符的子串
- 查找字符串中最长重复字符的子串
- 查找字符串中无重复最长子串的长度
- 谈几点对抽象工厂模式的看法
- js操作userData保存临时数据
- Linux – cannot remove owned file with 777 permissions
- 文件分配表
- 输出文件夹中java文件的路径和文件数目
- 查找一个字符串中最大重复子串(C语言版)
- C - A strange lift 解题报告
- JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
- 第三方JNI SDK开发——Delphi xe5
- nagios插件之hpux系统内存检查
- 收集linux几个快捷键
- 硬盘MBR全面分析
- Android [USB]MTP的介绍?驱动如何安装?
- git 使用