[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; }