温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言字符串中的最长不含重复字符的子串

发布时间:2024-08-30 14:35:36 来源:亿速云 阅读:80 作者:小樊 栏目:编程语言

要找到C语言字符串中的最长不含重复字符的子串,可以使用滑动窗口的方法。滑动窗口是一个在字符串上移动的窗口,窗口内的字符都是不重复的。当遇到重复字符时,将窗口的左边界移动到重复字符的下一个位置。这样,窗口内始终保持不重复字符,同时记录窗口的最大长度。

以下是一个C语言实现的示例:

#include<stdio.h>
#include<string.h>

int longest_substring_without_repeating_characters(const char *str) {
    int max_length = 0;
    int left = 0;
    int right = 0;
    int char_index[256] = {0}; // 用于存储每个字符最后出现的位置

    while (str[right] != '\0') {
        if (char_index[(int)str[right]] > 0 && char_index[(int)str[right]] >= left) {
            left = char_index[(int)str[right]]; // 更新窗口左边界
        }
        char_index[(int)str[right]] = right + 1; // 更新字符的最后出现位置
        max_length = (right - left + 1) > max_length ? (right - left + 1) : max_length; // 更新最大长度
        right++;
    }

    return max_length;
}

int main() {
    const char *str = "abcabcbb";
    printf("The length of the longest substring without repeating characters is: %d\n", longest_substring_without_repeating_characters(str));
    return 0;
}

在这个示例中,我们使用一个名为char_index的数组来存储每个字符最后出现的位置。当遇到重复字符时,我们根据char_index数组更新窗口的左边界。同时,我们记录窗口的最大长度。最后,返回最大长度作为结果。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI