int lengthOfLongestSubstring(string s) {
int best = 0;
int n = s.size();
for (int start = 0; start < n; start++) {
unordered_set<char> seen;
for (int end = start; end < n; end++) {
if (seen.count(s[end])) break;
seen.insert(s[end]);
best = max(best, end - start + 1);
}
}
return best;
}
public int lengthOfLongestSubstring(String s) {
int best = 0;
int n = s.length();
for (int start = 0; start < n; start++) {
Set<Character> seen = new HashSet<>();
for (int end = start; end < n; end++) {
if (seen.contains(s.charAt(end))) break;
seen.add(s.charAt(end));
best = Math.max(best, end - start + 1);
}
}
return best;
}
def length_of_longest_substring(s: str) -> int:
best = 0
for start in range(len(s)):
seen: set[str] = set()
for end in range(start, len(s)):
if s[end] in seen:
break
seen.add(s[end])
best = max(best, end - start + 1)
return best
function lengthOfLongestSubstring(s: string): number {
let best = 0;
for (let start = 0; start < s.length; start++) {
const seen = new Set<string>();
for (let end = start; end < s.length; end++) {
if (seen.has(s[end])) break;
seen.add(s[end]);
best = Math.max(best, end - start + 1);
}
}
return best;
}
int lengthOfLongestSubstring(string s) {
unordered_set<char> window;
int left = 0;
int best = 0;
for (int right = 0; right < (int)s.size(); right++) {
while (window.count(s[right])) {
window.erase(s[left]);
left++;
}
window.insert(s[right]);
best = max(best, right - left + 1);
}
return best;
}
public int lengthOfLongestSubstring(String s) {
Set<Character> window = new HashSet<>();
int left = 0;
int best = 0;
for (int right = 0; right < s.length(); right++) {
while (window.contains(s.charAt(right))) {
window.remove(s.charAt(left));
left++;
}
window.add(s.charAt(right));
best = Math.max(best, right - left + 1);
}
return best;
}
def length_of_longest_substring(s: str) -> int:
window: set[str] = set()
left = 0
best = 0
for right in range(len(s)):
while s[right] in window:
window.remove(s[left])
left += 1
window.add(s[right])
best = max(best, right - left + 1)
return best
function lengthOfLongestSubstring(s: string): number {
const window = new Set<string>();
let left = 0;
let best = 0;
for (let right = 0; right < s.length; right++) {
while (window.has(s[right])) {
window.delete(s[left]);
left++;
}
window.add(s[right]);
best = Math.max(best, right - left + 1);
}
return best;
}
int lengthOfLongestSubstring(string s) {
unordered_map<char, int> lastSeen;
int left = 0;
int best = 0;
for (int right = 0; right < (int)s.size(); right++) {
char ch = s[right];
auto it = lastSeen.find(ch);
if (it != lastSeen.end() && it->second >= left) {
left = it->second + 1;
}
lastSeen[ch] = right;
best = max(best, right - left + 1);
}
return best;
}
public int lengthOfLongestSubstring(String s) {
Map<Character, Integer> lastSeen = new HashMap<>();
int left = 0;
int best = 0;
for (int right = 0; right < s.length(); right++) {
char ch = s.charAt(right);
Integer prev = lastSeen.get(ch);
if (prev != null && prev >= left) {
left = prev + 1;
}
lastSeen.put(ch, right);
best = Math.max(best, right - left + 1);
}
return best;
}
def length_of_longest_substring(s: str) -> int:
last_seen: dict[str, int] = {}
left = 0
best = 0
for right, ch in enumerate(s):
prev = last_seen.get(ch)
if prev is not None and prev >= left:
left = prev + 1
last_seen[ch] = right
best = max(best, right - left + 1)
return best
function lengthOfLongestSubstring(s: string): number {
const lastSeen = new Map<string, number>();
let left = 0;
let best = 0;
for (let right = 0; right < s.length; right++) {
const ch = s[right];
const prev = lastSeen.get(ch);
if (prev !== undefined && prev >= left) {
left = prev + 1;
}
lastSeen.set(ch, right);
best = Math.max(best, right - left + 1);
}
return best;
}
int lengthOfLongestSubstring(const string& s) {
if (s.empty()) return 0;
int lastSeen[256]; // byte-indexed: ASCII / Latin-1 input
fill(begin(lastSeen), end(lastSeen), -1);
int left = 0;
int best = 0;
int n = s.size();
for (int right = 0; right < n; right++) {
if (n - left <= best) break;
unsigned char code = s[right];
if (lastSeen[code] >= left) left = lastSeen[code] + 1;
lastSeen[code] = right;
if (right - left + 1 > best) best = right - left + 1;
}
return best;
}
public int lengthOfLongestSubstring(String s) {
if (s == null || s.isEmpty()) return 0;
int[] lastSeen = new int[65536]; // one slot per UTF-16 code unit
Arrays.fill(lastSeen, -1);
int left = 0;
int best = 0;
int n = s.length();
for (int right = 0; right < n; right++) {
if (n - left <= best) break;
int code = s.charAt(right);
if (lastSeen[code] >= left) left = lastSeen[code] + 1;
lastSeen[code] = right;
if (right - left + 1 > best) best = right - left + 1;
}
return best;
}
def length_of_longest_substring(s: str) -> int:
if not isinstance(s, str) or not s:
return 0
last_seen: dict[int, int] = {} # sparse table keyed by code point
left = 0
best = 0
n = len(s)
for right in range(n):
if n - left <= best:
break
code = ord(s[right])
prev = last_seen.get(code, -1)
if prev >= left:
left = prev + 1
last_seen[code] = right
if right - left + 1 > best:
best = right - left + 1
return best
function lengthOfLongestSubstring(s: string): number {
if (typeof s !== 'string' || s.length === 0) return 0;
const lastSeen = new Int32Array(65536).fill(-1);
let left = 0;
let best = 0;
for (let right = 0; right < s.length; right++) {
if (s.length - left <= best) break;
const code = s.charCodeAt(right);
if (lastSeen[code] >= left) left = lastSeen[code] + 1;
lastSeen[code] = right;
if (right - left + 1 > best) best = right - left + 1;
}
return best;
}