DEV Community

Cover image for Solving the "Longest Substring Without Repeating Characters" Problem on LeetCode
Bollam Shiva Shankara
Bollam Shiva Shankara

Posted on • Edited on

1 1 1 1 1

Solving the "Longest Substring Without Repeating Characters" Problem on LeetCode

Question

Given a string s,find the length of the longest substring
without repeating characters. Click here to open question in Leetcode

Question type:

Medium,

Example 1:

Input: s = "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Enter fullscreen mode Exit fullscreen mode

Example 2:

Input: s = "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Enter fullscreen mode Exit fullscreen mode

Example 3:

Input: s = "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.
Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.
Enter fullscreen mode Exit fullscreen mode

Approach:

To find the length of the longest substring without repeating characters, we can use a sliding window approach. We'll maintain two pointers, l and r, which represent the left and right ends of the current substring. We'll also use a HashSet to keep track of the characters in the current substring.

Here's the step-by-step explanation of the approach:

Initialize two pointers, l and r, to 0. Initialize a HashSet hs to store characters in the current substring, and maxi to store the maximum length found so far.

Start iterating through the input string s from left to right (increment r):

a. If s.charAt(r) is not in the HashSet hs, it means we can extend the current substring. So, add s.charAt(r) to hs and update maxi to be the maximum of its current value and r - l + 1 (the length of the current substring).

b. If s.charAt(r) is already in hs, it means we have a repeating character. We need to shrink the substring by incrementing l and removing s.charAt(l) from hs until there are no repeating characters. This step ensures that we maintain a substring without repeating characters.

Continue this process until r reaches the end of the string.

Finally, return maxi, which represents the length of the longest substring without repeating characters.

Java Code:

Here's the Java code that implements the above approach:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        HashSet<Character> hs = new HashSet<>();
        int maxi = 0;
        int l = 0;

        for (int r = 0; r < s.length(); r++) {
            if (!hs.contains(s.charAt(r))) {
                hs.add(s.charAt(r));
                maxi = Math.max(maxi, r - l + 1);
            } else {
                while (s.charAt(l) != s.charAt(r)) {
                    hs.remove(s.charAt(l));
                    l++;
                }
                hs.remove(s.charAt(l));
                l++;
                hs.add(s.charAt(r));
            }
        }

        return maxi;
    }
}
Enter fullscreen mode Exit fullscreen mode

Time Complexity:

The time complexity of this solution is O(N), where N is the length of the input string s. This is because we traverse the string once, and for each character, we perform constant-time operations (addition/removal from HashSet and comparisons). Therefore, the overall time complexity is linear.

Happy coding,
shiva

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

The Most Contextual AI Development Assistant

Pieces.app image

Our centralized storage agent works on-device, unifying various developer tools to proactively capture and enrich useful materials, streamline collaboration, and solve complex problems through a contextual understanding of your unique workflow.

👥 Ideal for solo developers, teams, and cross-company projects

Learn more