跳到主要内容

简述编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的 ?

参考答案:

在C语言中,你可以编写一个函数来找到给定字符串中最长的由同一字符组成的子字符串。以下是一个可能的实现:

#include <stdio.h>
#include <string.h>

// 函数声明
void findLongestSubstring(char *str, int *len);

int main() {
    char str[] = "aaabbbccccdddd";
    int len;

    findLongestSubstring(str, &len);

    printf("最长由同一字符组成的子字符串的长度是: %d\n", len);

    return 0;
}

// 函数定义
void findLongestSubstring(char *str, int *len) {
    int maxLength = 1;  // 最长由同一字符组成的子字符串的初始长度
    int currentLength = 1;  // 当前由同一字符组成的子字符串的长度

    // 遍历字符串
    for (int i = 1; i < strlen(str); i++) {
        // 如果当前字符与前一个字符相同,则增加当前长度
        if (str[i] == str[i - 1]) {
            currentLength++;
        } else {
            // 如果当前字符与前一个字符不同,则更新最大长度,并重置当前长度
            if (currentLength > maxLength) {
                maxLength = currentLength;
            }
            currentLength = 1;
        }
    }

    // 检查最后一个由同一字符组成的子字符串
    if (currentLength > maxLength) {
        maxLength = currentLength;
    }

    // 将最长长度存储在len中
    *len = maxLength;
}

这个函数首先初始化两个变量,maxLengthcurrentLength,用于跟踪最长和当前由同一字符组成的子字符串的长度。然后,它遍历输入字符串,并检查每个字符是否与前一个字符相同。如果相同,则增加 currentLength;如果不同,则检查 currentLength 是否大于 maxLength,如果是,则更新 maxLength,并重置 currentLength。最后,函数检查最后一个由同一字符组成的子字符串,以确保它是最长的,并将结果存储在 len 中。