劳务网站怎样做/怎么建立一个网站
3. 无重复字符的最长子串
难度:中等
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 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 由英文字母、数字、符号和空格组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
Java代码:
class Solution {public int lengthOfLongestSubstring(String s) {HashSet<Character> set = new HashSet<>();int num=0;int j=0;if(s.length()==0){return 0;}else if(s.length()==1){return 1;}else{for(int i=0;i<s.length();i++){if(!set.contains(s.charAt(i))){set.add(s.charAt(i));num=num>set.size()?num:set.size();}else{while(set.contains(s.charAt(i))){set.remove(s.charAt(j));j++;}set.add(s.charAt(i));num=num>set.size()?num:set.size();}}return num;}}
}
JavaScript代码:
/*** @param {string} s* @return {number}*/
var lengthOfLongestSubstring = function(s) {const sets = new Set();let num=0;let j=0;if(s.length===0){return 0;}else if(s.length===1){return 1;}else{for(let i=0;i<s.length;i++){if(!sets.has(s[i])){sets.add(s[i]);num=num>sets.size?num:sets.size;}else{while(sets.has(s[i])){sets.delete(s[j]);j++;}sets.add(s[i]);num=num>sets.size?num:sets.size;}}return num;}
};
解题思路:
用滑动窗口。
在上面的流程中,我们还需要使用一种数据结构来判断 是否有重复的字符,常用的数据结构为哈希集合(即 C++ 中的 std::unordered_set,Java 中的 HashSet,Python 中的 set, JavaScript 中的 Set)