Longest Substring Without Repeating Characters

来源:互联网 发布:format java 编辑:程序博客网 时间:2024/06/05 07:24

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 Solution Run Time(983 test cases) A 40ms

代码实现

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的题目可以多考虑这方面的转换。
0 0