📅  最后修改于: 2023-12-03 15:29:43.738000             🧑  作者: Mango
在C语言中,字符串是一种以空字符(\0
)结尾的字符数组。C字符串问题6是一个常见的问题,被提出的形式通常是:
给定一个字符串,如何找到字符串中最长的子字符串,使得其中不含有重复的字符。
下面是一个示例:
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
为了解决这个问题,我们需要使用滑动窗口算法。具体来说,我们定义两个指针left
和right
来表示当前子字符串的左右边界。我们使用一个set
来记录当前子字符串中出现的字符。我们可以按照以下步骤来解决这个问题:
left
和right
指针都指向字符串的起始位置,用一个变量max_len
来保存最长的子字符串长度。right
向右移动一位,并将右边界所指向的字符加入set
中。set
中出现过了,那么我们需要将left
向右移动,直到当前的子字符串中不含有重复的字符为止。max_len
的值,并确保left
和right
都没有越界。下面是代码实现:
int lengthOfLongestSubstring(char *s) {
int n = strlen(s);
int left = 0, right = 0;
int max_len = 0;
bool set[128] = {false};
while (right < n) {
if (!set[s[right]]) {
set[s[right]] = true;
right++;
max_len = fmax(max_len, right - left);
} else {
set[s[left]] = false;
left++;
}
}
return max_len;
}
这样,我们就成功地解决了C字符串问题6。