gpt4 book ai didi

c++ - C中相同字符子串的递归算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:55:25 24 4
gpt4 key购买 nike

我正在尝试构建一个递归算法,该算法从诸如“xxxzzppp”的字符串开始,仅当相同字符的每个序列(连续子字符串)由以下组成时才返回 true与下一个相比,少于或等于字符,直到最后。

假设一个字符串是按字母顺序排列的。

否则它将返回0

例子:

xxppp = 1;  // by = I mean that it should return that value when given to the function
xxxp = 0;
nnnpppz = 0;
npz = 1;
npp = 1;
llleeeegggg = 1;

我试过这个:

int CheckOcc(char seq[]) {
int j = 0, counter = 0;

if (strlen(seq) == 0)
return 100; //last is always shorter than nothing

for (j = 0; j < strlen(seq); j++)
if (seq[0] == seq[j])
counter++;

if (counter <= CheckOcc(seq + j))
return counter;
else
return 0;

}

但是我就是不能让它工作,有人可以给个建议吗?我已经研究了两个小时了,就是想不通。

编辑:

请注意,通过传递 seq + j,我实际上传递了从刚刚结束的子串之后的第一个子串开始的 stirng。指针代数是正确的,我只是想不出算法,特别是,我不知道要返回什么。非常感谢任何帮助。

最佳答案

试试这个

#include <stdio.h>
#include <limits.h>

int CheckOcc(char seq[]) {
int j = 0, counter = 0;

if (!*seq) return INT_MAX;

for (j = 0; seq[j] && *seq == seq[j]; j++)
counter++;

return (counter <= CheckOcc(seq + j)) ? counter : 0;
}
int main(void){
char input[128];
while(1 == scanf("%127[^\n]%*c", input)){
if(CheckOcc(input))
printf("%s = 1\n", input);
else
printf("%s = 0\n", input);
}
return 0;
}

关于c++ - C中相同字符子串的递归算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38536243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com