面试题35:寻找一个字符串中最长的重复子串
2013-09-04 20:32
274 查看
思路:
1. 用字符串指针数组保存用户输入的字符串的所有后缀字符串;
2. 将后缀字符串集合进行排序;
3. 比较相邻字符串的公共子串长度,找到长度最大值,保存相应字符串即为所求
代码如下:
1. 用字符串指针数组保存用户输入的字符串的所有后缀字符串;
2. 将后缀字符串集合进行排序;
3. 比较相邻字符串的公共子串长度,找到长度最大值,保存相应字符串即为所求
代码如下:
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXCHAR 5000 //最长处理5000个字符 char c[MAXCHAR];//字符数组c保存用户输入的字符串 char *a[MAXCHAR];//字符串指针数组a保存用户输入的字符串的所有后缀字符串 //求出两个字符串的公共子串长度 int comlen( char *p, char *q ) { int i = 0; while( *p && (*p++ == *q++)) { ++i; } return i; } //字符串排序规则 int pstrcmp( const void *p1, const void *p2 ) { return strcmp( *(char* const *)p1, *(char* const*)p2 ); } int main(void) { char ch; int n = 0; int i; int temp; int maxlen=0; int maxi=0; printf("Please input your string:\n"); while ((ch=getchar()) != '\n') { //给数组赋初值 a = &c ; c[n++] = ch; } c = '\0'; qsort (a, n, sizeof(char*), pstrcmp );//将后缀字符串集合进行排序 for (i=0; i<n-1; ++i) { temp = comlen(a[i], a[i+1]); if( temp > maxlen ) { maxlen = temp; maxi = i; } } printf("%s\n", a[maxi]); system("PAUSE"); return 0; }
相关文章推荐
- 寻找一个字符串中的最长重复子串
- 在一个字符串中寻找到最长重复子串(1)
- 【寻找一个字符串中最长的重复子串】
- 【每日面试题】给定一个字符串,求出其最长的重复子串
- 寻找一个字符串中最长的重复子串
- 【每天学点算法题10.17】寻找一个字符串中的最长重复子串
- 寻找一个字符串中的最长重复子串
- 寻找一个字符串中最长的重复子串,如 abcdabc 最长重复串 是abc
- 每日面试题:给定一个字符串,求出其最长的重复子串
- 寻找一个字符串中最长的重复子串
- 求一个字符串当中的最长重复子串
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- 求一个字符串的最长不重复子串的最大长度
- 给定一个字符串,找到最长的子串的长度没有重复字符
- 求一个字符串中最长的非重复连续子串
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- 找出一个字符串中出现的重复的最长的字符子串
- Python简单实现查找一个字符串中最长不重复子串的方法
- 给定一个字符串,求出其最长的重复子串的长度
- 给定一个字符串,输出最长的重复子串