C 如何查找字符串中最长的相同字符?
输入:C 如何查找字符串中最长的相同字符?,c,string,C,String,输入:aabbbccbc 输出:3 这里重复时间最长的相同字符是b[aa(bbb)ccbc],因为有3个bs的序列在一起 我必须输入一个字符串,我必须使用合并排序和递归排序字符串,然后必须找到最长的相同字符 #include <stdio.h> #include <stdlib.h> #include <string.h> int lsc(char *a, int p, int r); int main(int argc, char *argv[]) {
aabbbccbc
输出:
3
这里重复时间最长的相同字符是b
[aa(bbb)ccbc],因为有3个b
s的序列在一起
我必须输入一个字符串,我必须使用合并排序和递归排序字符串,然后必须找到最长的相同字符
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int lsc(char *a, int p, int r);
int main(int argc, char *argv[]) {
int l = strlen(argv[1]);
printf("%d \n", lsc(argv[1], 0, l - 1));
return 0;
}
#包括
#包括
#包括
int lsc(字符*a,int p,int r);
int main(int argc,char*argv[]){
int l=strlen(argv[1]);
printf(“%d\n”,lsc(argv[1],0,l-1));
返回0;
}
这是该代码的
主要功能。我必须创建int lsc(char*a,int p,int r)
函数来检查输入。对字符串进行排序对这个问题没有帮助,事实上字符串根本不应该更改,因为这样做可能会产生不同的结果:aabbbcc
将是aabbccc
,结果为4
解决办法相当简单。遵循以下步骤:
- 如果字符串为空,则最长的序列为
0
- 否则,从第一个字符重复1次开始:
max=count=1
- 如果下一个字符相同,则增加le重复计数(
count++
),如果重复计数超过当前最大值,则增加该值(max++
)
- 否则,将重复计数重置为1(
count=1
)
- 跳到下一个字符
- 到达字符串末尾时,返回
max
对字符串排序无助于解决此问题,事实上,不应更改字符串,因为这样做可能会产生不同的结果:aabbbccbc
将得到aabbccc
,结果为4
解决办法相当简单。遵循以下步骤:
- 如果字符串为空,则最长的序列为
0
- 否则,从第一个字符重复1次开始:
max=count=1
- 如果下一个字符相同,则增加le重复计数(
count++
),如果重复计数超过当前最大值,则增加该值(max++
)
- 否则,将重复计数重置为1(
count=1
)
- 跳到下一个字符
- 到达字符串末尾时,返回
max
到目前为止,您尝试了什么?在将字符串分割为单个字符后,我正在考虑通过ASCII值相互比较字符。如果我找到相同的ASCII值,那么我将生成一个正计数器。但我不知道这是否是解决问题的正确方法。为什么“必须”使用合并排序?这似乎是一个简单的问题,您可以生成一个按字符索引的计数数组:| for i=0到n-1 | count[array[i]]++|,然后对计数[]进行一次扫描以找到最大计数。您能否解释一下如何使用合并排序解决此问题?由于顺序对计数很重要,我看不出排序有什么帮助?@kim:你可以通过点击分数下面的灰色复选标记来接受答案。到目前为止你做了什么?在将字符串分割为单个字符后,我正在考虑用ASCII值来比较字符之间的差异。如果我找到相同的ASCII值,那么我将生成一个正计数器。但我不知道这是否是解决问题的正确方法。为什么“必须”使用合并排序?这似乎是一个简单的问题,您可以生成一个按字符索引的计数数组:| for i=0到n-1 | count[array[i]]++|,然后对计数[]进行一次扫描以找到最大计数。您能否解释一下如何使用合并排序解决此问题?由于顺序对计数很重要,我不知道排序有什么帮助?@kim:你可以点击分数下面的灰色复选标记接受答案,这比“不需要对字符串排序”强;这更像是“字符串不能排序”(因为给出了示例aabbbccbc
,如果字符串排序,答案将是4
,而不是3
)。@JonathanLeffler:事实上,我应该更直接一些。答案修改了。它比“不需要排序字符串”强;这更像是“字符串不能排序”(因为给出了示例aabbbccbc
,如果字符串排序,答案将是4
,而不是3
)。@JonathanLeffler:事实上,我应该更直接一些。答案经修正。