给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s ="abcabcbb"
输出:3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s ="bbbbb"
输出:1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s ="pwwkew"
输出:3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
示例 4:
输入: s =""
输出:0
提示:
0<= s.length <=5*104
s 由英文字母、数字、符号和空格组成
通过次数785,590提交次数2,174,401
题目解法
intlengthOfLongestSubstring(char* s){//设置一个字符映射数组,来记录是否有重复字符产生int char_list[256]={0};//设置变量,ret是返回值,取得是每一次的right - left的最大值//使用的是前后夹击的方法,来计算最长子串,最关键是left的取值//left应该是取遇到重复字符时,上一个字符的下标int right =1, left =0, ret =0;while(*s !='\0'){//这里是来判断是否出现了重复字符, char_list[*s] 大于left时,//这时就是有重复字符,我们应该刷新左起点位置if(char_list[*s]> left){
left = char_list[*s];}//right用来记录,当前跑到了字符串第几个字符的位置
char_list[*s]= right;//ret使用三目运算符来迭代得到最终的最大值,这个用法挺常见
ret = ret > right -left ? ret : right -left;
right++;
s++;}return ret;}