C语言实现最长无重复字符子串长度计算
以下是一个使用 C 语言编写的解决方案:
#include <stdio.h>
#include <string.h>
int lengthOfLongestSubstring(char* s) {
int n = strlen(s);
int max_length = 0;
int start = 0;
int char_dict[128]; // ASCII 字符集大小为 128
// 初始化字符字典
memset(char_dict, -1, sizeof(char_dict));
for (int end = 0; end < n; end++) {
if (char_dict[s[end]] >= start) {
start = char_dict[s[end]] + 1;
}
char_dict[s[end]] = end;
int current_length = end - start + 1;
max_length = (current_length > max_length) ? current_length : max_length;
}
return max_length;
}
int main() {
char s[] = 'abcabcbb';
int result = lengthOfLongestSubstring(s);
printf('%d\n', result); // 输出 3
return 0;
}
该程序使用了类似的滑动窗口的方法,通过遍历字符串并维护一个字符字典来找到最长不含重复字符的子串的长度。字符字典存储了每个字符最近一次出现的位置。如果遇到重复字符,将起始位置移动到重复字符的下一个位置,并更新最长子串的长度。最后,将结果打印到控制台。
注意:在 C 语言中,需要包含头文件 <stdio.h> 和 <string.h> 来使用相应的函数和数据类型。
原文地址: https://www.cveoy.top/t/topic/bxzO 著作权归作者所有。请勿转载和采集!