leecode题解-3. 无重复字符的最长子串

思路:

1)使用滑动窗口的方法解题;

2)使用哈希集合来存储窗口 \[i, j)(最初 j = i)中的字符,同时检查下一个字符是否可以添加到窗口中,如果可以则添加到窗口中并更新答案,否则窗口向右滑动。

3)使用数组来模拟哈希集合的功能。

代码如下:

#include <string.h>

int lengthOfLongestSubstring(char * s){
    // 初始化窗口的左右边界以及最大子串长度
    int left = 0, right = 0, maxLen = 0;
    
    // 用来存储字符出现状态的数组,索引对应字符的ASCII码,值为布尔类型,表示该字符是否出现过
    int charTable[128] = {0};
    
    // 获取字符串长度
    int sLen = strlen(s);
    
    // 循环条件是右边界小于字符串长度
    while(right < sLen){
        // 如果当前字符未出现过
        if(charTable[s[right]] == 0){
            // 标记字符出现
            charTable[s[right]] = 1;
            
            // 将当前子串长度与最大子串长度进行比较,取大者
            maxLen = maxLen > right - left + 1 ? maxLen : right - left + 1;
            
            // 右边界向右移动
            right++;
        }else{
            // 如果当前字符出现过,那么左边界需要向右移动,直到移动到重复字符的位置
            // 同时需要将移动过程中的字符标记为未出现
            charTable[s[left]] = 0;
            left++;
        }
    }
    
    // 返回最大子串长度
    return maxLen;
}

 在C语言中,一个`int`类型的数组可以被初始化为全0。对于ASCII码的范围是0~127(共128个字符),可以使用一个长度为128的数组来表示每个字符的出现状态。数组的索引对应字符的ASCII码,值为布尔类型,表示该字符是否出现过。

在代码中,`charTable`数组被声明为`int charTable[128]`,并使用初始化列表 `{0}` 将所有元素初始化为0。这意味着所有的ASCII码对应的字符初始状态都未出现过。

例如,字符 'a' 的ASCII码是97,那么 `charTable[97]` 表示字符 'a' 的出现状态.

如果 `charTable[97]` 的值为1,表示字符 'a' 已经出现过;如果值为0,表示字符 'a' 还未出现过。

在算法的执行过程中,可以通过 `charTable[s[right]]` 来获取字符 `s[right]` 的出现状态,并根据这个状态进行相应的处理。

补充说明:

定义一个`int`类型的数组 `n` ,通过 `n[a]` 可以获取字符 `a` 的ASCII码对应的数组元素。

#include <stdio.h>

int main() {
    int n[128] = {0};  // 初始化数组,所有元素都为0
    
    char c = 'a';
    int ascii = (int)c;  // 获取字符 'a' 的ASCII码
    n[ascii] = 1;  // 将字符 'a' 的出现状态标记为1
    
    printf("ASCII of 'a': %d\n", ascii);
    printf("Value at n[97]: %d\n", n[ascii]);  // 输出:Value at n[97]: 1
    
    return 0;
}

在上述示例中,定义了一个大小为128的整型数组 `n`,并将所有元素初始化为0。

然后获取字符 `'a'` 的ASCII码,并将对应的数组元素 `n[97]` 的值设置为1。通过 `n[97]` 就可以获取字符 `'a'` 的出现状态。

注:数组 `n` 的索引应该在有效的ASCII码范围内,即0~127。如果字符的ASCII码超出了这个范围,访问对应的数组元素可能会导致越界错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
《计算机操作系统(第4版)》学习指导与题解 含实验.pdf是一本关于计算机操作系统的学习指导和题解的电子书。这本书主要针对操作系统这个重要的计算机课程内容进行了详细的解释和讲解,对读者学习操作系统具有很大的帮助。 这本电子书的特点是结合了学习指导和题解,旨在帮助读者更好地理解和掌握操作系统的知识。书中通过讲解操作系统的基本概念、原理和技术,引导读者深入理解操作系统的工作原理和实现方法。同时,书中还提供了一些习题和实验,帮助读者巩固所学的知识,提升操作系统的实践能力。 这本电子书的内容丰富全面,涵盖了操作系统的各个方面。包括进程管理、内存管理、文件系统、输入输出管理等内容。每个章节都有详细的解释和示例,配有相关的习题和实验,可以帮助读者更好地理解和运用所学的知识。 对于计算机专业的学生和从事计算机相关工作的技术人员来说,这本电子书是一本很好的学习资料。通过学习这本书,读者可以全面了解和掌握操作系统的知识,提高自己的技能水平。同时,这本电子书还适合作为操作系统相关课程的参考教材,帮助教师更好地教授操作系统的知识。 总之,《计算机操作系统(第4版)》学习指导与题解 含实验.pdf 是一本内容丰富、有助于学习操作系统的电子书,对于学习操作系统或从事计算机相关工作的人士来说都是一本很有价值的学习资料。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值