📜  C |字串|问题6(1)

📅  最后修改于: 2023-12-03 15:29:43.738000             🧑  作者: Mango

C字符串问题6

在C语言中,字符串是一种以空字符(\0)结尾的字符数组。C字符串问题6是一个常见的问题,被提出的形式通常是:

给定一个字符串,如何找到字符串中最长的子字符串,使得其中不含有重复的字符。

下面是一个示例:

Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.

为了解决这个问题,我们需要使用滑动窗口算法。具体来说,我们定义两个指针leftright来表示当前子字符串的左右边界。我们使用一个set来记录当前子字符串中出现的字符。我们可以按照以下步骤来解决这个问题:

  1. 初始化leftright指针都指向字符串的起始位置,用一个变量max_len来保存最长的子字符串长度。
  2. right向右移动一位,并将右边界所指向的字符加入set中。
  3. 如果右边界所指向的字符已经在set中出现过了,那么我们需要将left向右移动,直到当前的子字符串中不含有重复的字符为止。
  4. 在每一步操作时,都需要更新max_len的值,并确保leftright都没有越界。

下面是代码实现:

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。