Skip to content
27 changes: 27 additions & 0 deletions String/LengthofLongestSubstringWithoutRepetition.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
* @function lengthOfLongestSubstring
* @description Finds the length of the longest substring in a given string without repeating characters
* @param {String} str - The input string
* @returns {Number} The Length of the longest substring in a given string without repeating characters
* @example lower("abcabcbb") => 3
* @example lower("bbbbb") => 1
*/

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 }
32 changes: 32 additions & 0 deletions String/test/LengthofLongestSubstringWithoutRepetition.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { lengthOfLongestSubstring } from '../LengthofLongestSubstringWithoutRepetition'

describe('Testing the lengthOfLongestSubstring function', () => {
it('Test 1: Check by invalid type', () => {
expect(() => lengthOfLongestSubstring(345)).toThrowError(TypeError)
expect(() => lengthOfLongestSubstring(true)).toThrowError(TypeError)
expect(() => lengthOfLongestSubstring(null)).toThrowError(TypeError)
})

it('Test 2: Check with strings containing unique characters', () => {
expect(lengthOfLongestSubstring('abcabcbb')).toBe(3)
expect(lengthOfLongestSubstring('bbbbb')).toBe(1)
expect(lengthOfLongestSubstring('pwwkew')).toBe(3)
})

it('Test 3: Check with empty string', () => {
expect(lengthOfLongestSubstring('')).toBe(0)
})

it('Test 4: Check with string containing a single space', () => {
expect(lengthOfLongestSubstring(' ')).toBe(1)
})

it('Test 5: Check with mixed case string', () => {
expect(lengthOfLongestSubstring('AaBbCc')).toBe(3)
expect(lengthOfLongestSubstring('AbCdEf')).toBe(6)
})

it('Test 6: Check with long string with repeating characters', () => {
expect(lengthOfLongestSubstring('abcdefghijklmnaaaaa')).toBe(13)
})
})