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

Recursive algorithm for substrings of the same character in C

本文关键字:子串 递归算法 字符      更新时间:2023-10-16

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

尝试这个

#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 = 1n", input);
        else
            printf("%s = 0n", input);
    }
    return 0;
}