Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何查找字符串中最长的相同字符?_C_String - Fatal编程技术网

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:事实上,我应该更直接一些。答案经修正。