Find longest substring without repeating characters

前端 未结 30 2559
轻奢々
轻奢々 2020-12-12 18:07

Given a string S of length N find longest substring without repeating characters.

Example:

Input:

30条回答
  •  一个人的身影
    2020-12-12 19:04

    I was asked the same question in an interview.

    I have written Python3 code, to find the first occurrence of the substring with all distinct chars. In my implementations, I start with index = 0 and iterate over the input string. While iterating used a Python dict seems to store indexes of chars in input-string those has been visited in the iteration.

    In iteration, if char c, does not find in current substring – raise KeyError exception

    if c found to be a duplicate char in the current substring (as c previously appeared during iteration – named that index last_seen) start a new substring

    def lds(string: str) -> str:
        """ returns first longest distinct substring in input `string` """
        seens = {}
        start, end, curt_start = 0, 0, 0
        for curt_end, c in enumerate(string):
            try:
                last_seen = seens[c]
                if last_seen < curt_start:
                    raise KeyError(f"{c!r} not found in {string[curt_start: curt_end]!r}")
                if end - start <  curt_end - curt_start:
                    start, end = curt_start, curt_end
                curt_start = last_seen + 1
            except KeyError:
                pass
            seens[c] = curt_end
        else: 
            # case when the longest substring is suffix of the string, here curt_end
            # do not point to a repeating char hance included in the substring
            if string and end - start <  curt_end - curt_start + 1:
                start, end = curt_start, curt_end + 1
        return string[start: end]
    

提交回复
热议问题