我正在尝试构建一个递归算法,从“xxxzzppp”之类的字符串开始,只有当同一个字符的每个序列(连续子字符串)由与下一个字符相比,字符数少于或等于字符,直到最后。
假设字符串按字母顺序排列。
否则将返回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,我实际上是在刚刚结束的第一个子串之后从第一个子串开始传递。指针代数是正确的,我只是想不出算法,特别是我不知道返回是什么。非常感谢任何帮助。
答案 0 :(得分:2)
试试这个
#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;
}