找到一个string中最长的不含相同的字段的子字符串

题目如下:
找到一个string中最长的不含相同的字段的子字符串

Given a string s, find the length of the longest substring without repeating characters.

Example
Input: s = “abcabcbb”
Output: 3
Explanation: The answer is “abc”, with the length of 3.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

可以使用2个指针的方法,利用2个循环;
第一个循环遍历整个字符串;
第二个循环在第一个循环的指针位置继续查找不含有相同元素的子字符串。

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        length=len(s)
        #定义哈希表
        occ=set()
        #定义right指针的位置,首先位于第一个左指针的左侧和子字符串的长度0
        rp,number=-1,0
        #利用i当左指针,先遍历整个string
        for i in range(length):
            #i=0的时候不执行if语句
            if i!=0:
                occ.remove(s[i-1])
                #右指针向右移动一位,并且判定是否有一样的元素
            while rp+1<length and s[rp+1] not in occ:
                #将右侧指针指向的元素加入set()中,保存
                occ.add(s[rp+1])
                #指针向右移动
                rp+=1
                #number一直在保存最大的子字符串的长度
            number=max(number,rp-i+1)
        return number
            
上一篇:无重复的最长子串


下一篇:JavaSE的一些题目(正在学习)