无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
一、解题思路
看到任何一个关于什么子串问题,还是了数组问题
先这么想,以i结尾最长的答案是什么或者以i开头最长的答案是什么
这道题我们想以i结尾最长子数组是多长
答案是从左往右求的
当我来到i位置的时候,i-1位置的答案你求过了,i-2位置的答案你求过了,i-3位置的答案你求过了
那么我就想我结尾时的答案能不能由我之前求出答案帮我加速得到,
为啥要把求解流程定位每个位置结尾或每个位置开头,我就是想用动态规划
二、代码
class Solution {
public int lengthOfLongestSubstring(String s) {
char[] str=s.toCharArray();
int n=str.length;
int[] map=new int[256];
for(int i=0;i<256;i++){
map[i]=-1;
}
int pre=0;
int ans=0;
int cur=0;
for(int i=0;i<n;i++){
int p1=i-map[str[i]];
int p2=pre+1;
cur=Math.min(p1,p2);
ans=Math.max(ans,cur);
pre=cur;
map[str[i]]=i;
}
return ans;
}
}