[C/C++应用] 求字符串中最长连续子串长度


	[C/C++应用] 求字符串中最长连续子串长度
[编程语言教程]

求解字符串中最长连续子串长度,这类问题一般通过一个滑动窗口就能在O(N)的时间复杂度下求解。
先通过一张图来观察下窗口滑动的过程:

技术图片

上图的求解过程展示中,窗口从左至右不断扩张/滑动。当窗口触达字符串末尾字符时运算结束,窗口的宽度为最终结果。初始窗口的宽度为1,我们不断的通过向当前窗口覆盖的子串后面追加一个字符看是否能满足我们的要求,如果满足窗口扩张,如果不满足,窗口向右滑动。

因此,根据上面的模拟过程,我们可以写出如下代码:

#include "stdio.h"
#include "string.h"

/* 求字符串中最长连续子串长度 */ 
int longestSeriesLCS(char *s)
{
    if (s == NULL || strlen(s) == 0) {
        return 0;
    }
    
    int left = 0, right = 1;
    int result = 1;
    
    while (right < strlen(s)) {
        if (s[left] == s[right]) {
            result = right - left + 1;
        } else {
            left++;
        }
        right++;
    }
    
    return result;
}

int main()
{
    char str[] = "sdabbbdraaaathbnnn";
    printf("%d
", longestSeriesLCS(str));
    return 0;
}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » [C/C++应用] 求字符串中最长连续子串长度