C

时间:2016-07-22 22:44:16

标签: c++ c arrays algorithm recursion

我正在尝试构建一个递归算法,从“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,我实际上是在刚刚结束的第一个子串之后从第一个子串开始传递。指针代数是正确的,我只是想不出算法,特别是我不知道返回是什么。非常感谢任何帮助。

1 个答案:

答案 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;
}