跳至主要內容

1.无重复字符的最长字串

Echo Hou...大约 1 分钟算法字符串滑动窗口已做4遍

1.无重复字符的最长字串

题目

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

输入:"abc"
输出:3
输入:"ababc"
输出:3

思路

本题有两个关键点,不含重复字符最长子串

看到最长子串,可以想到滑动窗口,比如遍历"ababc"字符串,第一次碰到重复的字符a时,就计算这个字符下标之后的长度即"abc",就像一个滑动的窗口,直到遇到再次重复的时候。

字符串一共有128个ASCII码,可以声明一个数组,记录当前字符出现的上一次下标,如果没有出现过,默认为-1。

并且start记录每个不重复字符串的初始位置,记录每个字符出现的下标,如果下次访问发现不为-1,说明出现过,start更新为这个下标的下一个

public int findLongest(String s){
  int[] last = new int[128];
  Arrays.fill(last,-1);
  int start = 0;
  int res = 0;
  for(int i = 0;i < s.length();i++){
    int index = s.charAt(i);
    start = Math.max(start,last[index] + 1);
    res = Math.max(res,i-start+1);
    last[index] = i;
  }
  return res;
}
上次编辑于:
贡献者: houbingzhi123
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8