Longest Substring Without Repeating Characters

3.Longest Substring Without Repeating Characters

from LeetCode

Description

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.

JAVA Solution

My Accepted SolutionRun Time(983 test cases)
A40ms

代码实现

A

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        //new一个数组作为哈希表,用哈希表记录字符串中某个字符出现的位置。映射方式为直接定址法,用字符的数值作为参数一一对应到哈希表中。char占一个字节,介于0~255之间,所以new的数组大小为256.
        int[] Hash = new int[256];
        //index是索引代表起始位置,索引和数组中元素的初值设为0表示该字符还未出现过
        int index=0,max=0;
        for(int i=0;i<s.length();i++)
        {
            int n = (int)s.charAt(i);
                //若不是第一次出现,改变起始位置
                if(Hash[n] > index)
                    index = Hash[n];
            if(i-index+1 > max)
                max = i-index+1;
             //更新哈希表中字符的最新位置
            Hash[n] = i+1;
        }
        return max;
    }
}

日志:

Longest Substring Without Repeating Characters,求最长无重复字串。以上方案参照了一位博主的C++实现方案。看来数据结构是算法密不可分的辅助工具啊,此方案的时间复杂度是n。算法设计中常常会用到时间复杂度和空间复杂度的转换,少计算就多花点内存。一般onlinejude的题目可以多考虑这方面的转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值