3. Longest Substring Without Repeating Characters

描述

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

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

分析:

题意是找出无重复的最大子串的长度,可以用两个指针,前指针指向子串延长的位置,后指针指向子串开头,配合hash表标记是否在子串中见过前指针(子串新添加字符)的字符,如果hash值为1,即已经出现过,那之前的子串就结束了,将后指针逐个移动至前指针位置重新记子串,沿途将字母的hash值清零。这样遍历过后的子串长度最大值即为结果。遍历次数为2N

java

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int[] index = new int[128];
        int ans = 0, i = 0, j = 0;
        while(i<s.length() && j<s.length()){
            if(index[s.charAt(j)] == 0 || i==j){
                ans = Math.max(ans, j-i+1);
                index[s.charAt(j++)] = 1;
            }
            else{
                index[s.charAt(i++)] = 0;
            }
        }
        return ans;
    }
}

Math.max(…)

String s.charAt(i): 返回字符串第i个字符的ascii码。

String s.length(): 不同于list长度是一个变量,字符串的长度是一个方法。

Python

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        ans = 0
        i = j = 0
        indices = [0 for i in range(128)]
        while i < len(s) and j < len(s):
            if(indices[ord(s[j])] == 0 or i == j):
                indices[ord(s[j])] = 1
                j += 1
                ans = ans if ans > (j - i) else (j - i)
            else:
                indices[ord(s[i])] = 0
                i += 1
        return ans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值