查找重复次数最多的子字符串

查找重复次数最多的子字符串,借鉴兆芯查找重复次数最多的字符,我们可以进行扩展,查找重复次数最多的子字符串。

基本思想是把重复次数最大记录下来,并记录起始位置;

#include <iostream>

#include <stdio.h>

using namespace std;

int mystrlen(char *str)

{

int sum(0);

char *temp=str;

while(*temp!=‘\0‘)

{

++temp;

++sum;

}

return sum;

}

bool contain_sub_str(char *str, char *sub_str)

{

int len1= mystrlen(str);

int len2= mystrlen(sub_str);

int i(0);

if(len1<len2)

return false;

while(i<len2)

{

if( *(str+i)!= *(sub_str+i))

break;

++i;

}

if(i==len2)

return true;

return false;

}

int find_max_repeat(char *str, char *sub_str, int *len)

{

int i(0);

int num(0),start(0),len2(mystrlen(sub_str));

while(*(str+i) !=‘\0‘)

{

if(contain_sub_str(str+i, sub_str)){

int s=i,k=0;

while(contain_sub_str(str+i, sub_str))

{

i+=len2;

++k;

}

if(k>num){

num=k;

start=s;

}

}

else

++i;

}

*len=num;

return start;

}

int main()

{

char str[]="abaabaaacdeeabaabaabaabaeefdefdefdefdsceebd";

int i,j;

i=find_max_repeat(str, "aba", &j);

printf("%d,%d\n",i,j);

i=find_max_repeat(str, "efd", &j);

printf("%d,%d\n",i,j);

return 0;

}

时间: 2024-10-07 03:41:58

查找重复次数最多的子字符串的相关文章

程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】

转!http://blog.csdn.net/dabusideqiang/article/details/38271661 11.求旋转数组的最小数字 题目:输入一个排好序的数组的一个旋转,输出旋转数组的最小元素. 分析:数组的旋转:把一个数组最开始的若干个元素搬到数组的末尾.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1.这道题最直观的解法并不难.从头到尾遍历数组一次,就能找出最小的元素,时间复杂度显然是O(N).但这个思路没有利用输入数组

js实现从字符串中查找出现次数最多的字符的两种解决办法

方法一:正则表达式匹配 1 var str = "adadfdfseffserfefsefseeffffftsdg"; 2 var maxLength = 0; var result = ""; 3 while (str != '') { 4 oldStr = str; 5 getStr = str.charAt(0); 6 str = str.replace(new RegExp(getStr, "g"), ""); 7 i

POJ 3693 Maximum repetition substring (寻找重复次数最多的连续子串)

Maximum repetition substring Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9083   Accepted: 2782 Description The repetition number of a string is defined as the maximum number R such that the string can be partitioned into R same conse

spoj687 后缀数组重复次数最多的连续重复子串

REPEATS - Repeats no tags A string s is called an (k,l)-repeat if s is obtained by concatenating k>=1 times some seed string t with length l>=1. For example, the string s = abaabaabaaba is a (4,3)-repeat with t = aba as its seed string. That is, the

POJ - 3693 Maximum repetition substring(后缀数组求重复次数最多的连续重复子串)

Description The repetition number of a string is defined as the maximum number R such that the string can be partitioned into R same consecutive substrings. For example, the repetition number of "ababab" is 3 and "ababa" is 1. Given a

寻找数组中重复次数最多的数

#include<iostream> #include<map> using namespace std; int helper(const int a[],const int n) { map<int,int> m; for(int i = 0;i<n;i++) m[a[i]]++; map<int,int>::iterator comp = m.begin(); for( map<int,int>::iterator it = comp

php面试题:如何知道一个未知长度的字符串哪个字符出现的次数最多?(字符串可由字母,数字及其他字符组成)请写出代码。

如何知道一个未知长度的字符串哪个字符出现的次数最多?(字符串可由字母,数字及其他字符组成)请写出代码. $str="asdfgfdas323344##$\$fdsdfg*$**$*$**$$443563536254fas";//任意长度字符串 //解法一(最快速的解法,但是基本功要扎实) $arr=str_split($str); $arr=array_count_values($arr); arsort($arr); print_r($arr); //解法二(对逻辑能力有一定要求)

C# 找出数组中重复次数最多的数值

给定一个int数组,里面存在重复的数值,如何找到重复次数最多的数值呢? 这是在某社区上有人提出的问题,我想到的解决方法是分组. 1.先对数组中的所有元素进行分组,那么,重复的数值肯定会被放到一组中: 2.将分组进行排序,排序条件是分组中的元素个数: 3.元素数量最多的那个分组中的数值就是重复次数最多的. 基于以上思路,可以写出以下代码: // 示例数组,90重复4次,1重复2次,3重复3次 int[] arr = { 1, 1, 3, 3, 3, 7, 50, 15, 15, 90, 90, 9

求数组中重复次数最多的元素

1.问题描述 例如:数组a={2,3,1,5,5,5,5,7,8,1},元素2.3.7.8各出现1次,1出现两次,5出现4次,则重复次数最多的元素为5. 2. 方法与思路 2.1 以空间换时间,索引法 定义一个数组int cnt[MAX],将其元素全部初始化为0.然后遍历数组a,执行cnt[a[i]]++操作.最后在cnt数组中找最大的数,对应的数即为重复次数最多的数. 代码示例如下: //以空间换时间,索引法 int MaxFreq_index(int a[],int n) { int i,j