题目链接:
https://www.lintcode.com/problem/longest-substring-without-repeating-characters/description
给定一个字符串,请找出其中无重复字符的最长子字符串。
Example
样例 1:
输入: "abcabcbb"
输出: 3
解释: 最长子串是 "abc".
样例 2:
输入: "bbbbb"
输出: 1
解释: 最长子串是 "b".
Challenge
O(n) 时间复杂度
思路1:将字符串转化为字符数组,指定max用于保存最长字符串的长度
指定两个指针,start指向字符串开始位置,end指向字符串结束位置。
指定一个hashMap用于保存字符串中所含字符和该字符所在位置。
遍历数组,若当前字符在hashMap中没有出现过,则加入hashMap,根据end-start和max确定max的值;
否则确定上次出现该字符的位置,将该字符前的所有在hashMap中的字符全部删除。
思路2:与思路1类似,只是将hashMap用于保存字符串中所含字符和该字符是否出现,出现则设置为1
遍历数组,若当前字符在hashMap中没有出现过或对应值为0,则加入hashMap,根据end-start和max确定max的值;
否则确定上次出现该字符的位置,将该字符前的所有在hashMap中的字符对应值设置为0。