一、题目:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
假设字符串中只包含从 a
到 z
的字符。
数据范围
输入字符串长度 [0,1000][0,1000]。
样例
输入:"abcabc"
输出:3
二、代码展示
#include <stdio.h>
#include <string.h>
int lengthOfLongestSubstring(char* s) {
int n = strlen(s);
int maxLength = 0;
int start = 0;
int charIndex[26]; // 记录每个字符最后出现的位置
// 初始化charIndex数组,将所有字符的最后出现位置设置为-1
for (int i = 0; i < 26; i++) {
charIndex[i] = -1;
}
for (int end = 0; end < n; end++) {
// 如果字符已经出现过,并且出现位置在当前窗口内,更新窗口的起始位置
if (charIndex[s[end] - 'a'] >= start) {
start = charIndex[s[end] - 'a'] + 1;
}
// 更新字符的最后出现位置
charIndex[s[end] - 'a'] = end;
// 更新最大长