提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目信息
二、思路讲解
方向
- 从前向后遍历寻找最长不重复字串长度,两层循环,外层循环确定起始点,内层循环判断是否有重复字符。
- ASCII码最多只有256种;
难点
- 如何判断字符是否重复
- 如何确定i的跳转
解决方法
- 定义一个int型数组rem,容量为256,初始化为0。每要添加新元素,以该元素ASCII码为下标查找rem数组,若不为0,说明子串中已有该元素,此时该子串扩展到最大。
- 跳转到重复元素第一次出现时的下标位置后一位处,以避免了无意义的子串拓展,而重复元素第一次出现时后一位元素的位置(下标+1)早已被我们记录在rem数组之中,就是i的跳转位置。
- 在每次 i 跳转后,即将重新开始拓展新的子串,需要初始化rem数组。
三、C++实现
实现代码如下
#include<bits/stdc++.h>
using namespace std;