Given a string s
, find the length of the longest substring without repeating characters.
To solve this problem, we can use the sliding window technique along with a dictionary to keep track of the most recent index of each character.
last_position
(dictionary): Stores the last seen index of each character.max_length
(integer): Tracks the length of the longest substring without repeating characters. Initialize it to 0
.prev
(integer): Marks the starting index of the current substring window. Initialize it to 0
.Use a for loop to iterate over the string with an index i
and the current character s[i]
.
Check for Repeating Characters:
s[i]
is found in last_position
and last_position[s[i]] >= prev
:
prev
to last_position[s[i]] + 1
to move the starting index of the window after the last occurrence of the character.Update the Window and Variables:
last_position[s[i]]
to the current index i
.i - prev + 1
.max_length
if the current substring length is greater.After the loop, max_length
contains the length of the longest substring without repeating characters.
Input:
s = "abcabcbb"
Output:
3
Explanation:
The longest substring without repeating characters is "abc"
, with a length of 3
.
Input:
s = "bbbbb"
Output:
1
Explanation:
The longest substring without repeating characters is "b"
, with a length of 1
.
Input:
s = "pwwkew"
Output:
3
Explanation:
The longest substring without repeating characters is "wke"
, with a length of 3
.
Input:
s = "abcde"
Output:
5
Explanation:
All characters are unique, so the longest substring is the entire string.
Input:
s = ""
Output:
0
Explanation:
The string is empty, so the longest substring length is 0
.
Input:
s = "abba"
Output:
2
Explanation:
The longest substrings without repeating characters are "ab"
or "ba"
, both with a length of 2
.
0 <= s.length <= 10^5
s
consists of English letters, digits, symbols, and spaces.https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
Loading component...
Loading component...
Main Function is not defined.
INPUT : s ="abcabcbb"
OUTPUT: 3
public static int lengthOfLongestSubstring(string s){
int count = 0;
int maxi = 0;
int prev =0;
map<char,int>mp;
for(int i = 0; i <s.length();i++){
if(mp.find(s[i] == mp.end()){
mp[s[i]] = i;
}
else{
int idx = mp[s[i]];
int len = i - prev ;
maxi = max(maxi, len);
mp.clear();
i = idx ;
prev = idx +1 ;
}
if(mp.size()>0){
int size = mp.size();
maxi = max(size,maxi);
}
return maxi;
}//function end
Utility Function is not required.