NeetCode 150 / Sliding Window
016Longest Substring Without Repeating Characters
MediumSliding WindowO(n)
কোড
Python
def lengthOfLongestSubstring(s: str) -> int:
seen = {}
l = best = 0
for r, c in enumerate(s):
if c in seen and seen[c] >= l:
l = seen[c] + 1
seen[c] = r
best = max(best, r - l + 1)
return bestJava
public int lengthOfLongestSubstring(String s) {
Map<Character,Integer> seen = new HashMap<>();
int l = 0, best = 0;
for (int r = 0; r < s.length(); r++) {
char c = s.charAt(r);
if (seen.containsKey(c) && seen.get(c) >= l) l = seen.get(c) + 1;
seen.put(c, r);
best = Math.max(best, r - l + 1);
}
return best;
}Kotlin
fun lengthOfLongestSubstring(s: String): Int {
val seen = mutableMapOf<Char, Int>()
var l = 0; var best = 0
for ((r, c) in s.withIndex()) {
if (seen.getOrDefault(c, -1) >= l) l = seen[c]!! + 1
seen[c] = r
best = maxOf(best, r - l + 1)
}
return best
}C++
int lengthOfLongestSubstring(string s) {
unordered_map<char,int> seen;
int l=0, best=0;
for (int r=0; r<s.size(); r++) {
if (seen.count(s[r]) && seen[s[r]] >= l) l = seen[s[r]]+1;
seen[s[r]] = r;
best = max(best, r-l+1);
}
return best;
}C
int lengthOfLongestSubstring(char* s) {
int last[128]; memset(last,-1,sizeof(last));
int l=0,best=0;
for(int r=0;s[r];r++){
int c=s[r];
if(last[c]>=l) l=last[c]+1;
last[c]=r;
if(r-l+1>best)best=r-l+1;
}
return best;
}জটিলতা
O(n)
সময় — অ্যারেটা একবারই ঘুরি, ম্যাপে খোঁজা O(1)।
O(1)
জায়গা — সবচেয়ে খারাপ ক্ষেত্রে সব সংখ্যা ম্যাপে থাকে।
আগের সমস্যা← Best Time to Buy and Sell Stockপরের সমস্যাLongest Repeating Character Replacement →