mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-07 19:17:33 +08:00
feat: New String Algorithm for LengthofLongestSubstringWithoutRepeati… (#1389)
* feat: New String Algorithm for LengthofLongestSubstringWithoutRepeatingCharacters * Fixed Errors and Mistakes in New Algorithm LengthofLongestSubstringWithoutRepetition * fix:#1389 Errors Fixed * fix:#1389 Syntax and Code Errors Fixed * fix:#1389 Errors FIxed * Fixed All new errors * fix:1389 Implemented suggestions and corrections * Use @see annotation --------- Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
This commit is contained in:
27
String/LengthofLongestSubstringWithoutRepetition.js
Normal file
27
String/LengthofLongestSubstringWithoutRepetition.js
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* @description : Given a string, the function finds the length of the longest substring without any repeating characters
|
||||||
|
* @param {String} str - The input string
|
||||||
|
* @returns {Number} The Length of the longest substring in a given string without repeating characters
|
||||||
|
* @example lengthOfLongestSubstring("abcabcbb") => 3
|
||||||
|
* @example lengthOfLongestSubstring("bbbbb") => 1
|
||||||
|
* @see https://leetcode.com/problems/longest-substring-without-repeating-characters/
|
||||||
|
*/
|
||||||
|
|
||||||
|
const lengthOfLongestSubstring = (s) => {
|
||||||
|
if (typeof s !== 'string') {
|
||||||
|
throw new TypeError('Invalid Input Type')
|
||||||
|
}
|
||||||
|
let maxLength = 0
|
||||||
|
let start = 0
|
||||||
|
const charMap = new Map()
|
||||||
|
for (let end = 0; end < s.length; end++) {
|
||||||
|
if (charMap.has(s[end])) {
|
||||||
|
start = Math.max(start, charMap.get(s[end]) + 1)
|
||||||
|
}
|
||||||
|
charMap.set(s[end], end)
|
||||||
|
maxLength = Math.max(maxLength, end - start + 1)
|
||||||
|
}
|
||||||
|
return maxLength
|
||||||
|
}
|
||||||
|
|
||||||
|
export { lengthOfLongestSubstring }
|
@ -0,0 +1,26 @@
|
|||||||
|
import { lengthOfLongestSubstring } from '../LengthofLongestSubstringWithoutRepetition'
|
||||||
|
|
||||||
|
describe('LengthOfLongestSubstring', () => {
|
||||||
|
it('should throw error if parameter is not string', () => {
|
||||||
|
expect(() => lengthOfLongestSubstring(345)).toThrowError(TypeError)
|
||||||
|
expect(() => lengthOfLongestSubstring(true)).toThrowError(TypeError)
|
||||||
|
expect(() => lengthOfLongestSubstring(null)).toThrowError(TypeError)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should check substrings containing unique characters', () => {
|
||||||
|
expect(lengthOfLongestSubstring('abcabcbb')).toBe(3)
|
||||||
|
expect(lengthOfLongestSubstring('bbbbb')).toBe(1)
|
||||||
|
expect(lengthOfLongestSubstring('pwwkew')).toBe(3)
|
||||||
|
expect(lengthOfLongestSubstring(' ')).toBe(1)
|
||||||
|
expect(lengthOfLongestSubstring('abcdefghijklmnaaaaa')).toBe(13)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should give zero for empty strings', () => {
|
||||||
|
expect(lengthOfLongestSubstring('')).toBe(0)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should be case-sensitive', () => {
|
||||||
|
expect(lengthOfLongestSubstring('AaBbCc')).toBe(3)
|
||||||
|
expect(lengthOfLongestSubstring('AbCdEf')).toBe(6)
|
||||||
|
})
|
||||||
|
})
|
Reference in New Issue
Block a user