3. Longest Substring Without Repeating Characters

来源:互联网 发布:迅雷mac无法登录会员 编辑:程序博客网 时间:2024/05/21 15:42

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.

求最长的不重复子串,最开始用hashmap存,效率比较低,后来参考网上的解法,运用一个数组来保存字符出现的位置,速度提升了很多。

public static int lengthOfLongestSubstring2(String s) {int[] pos=new int[256];for(int i=0; i<pos.length; i++){pos[i]=Integer.MAX_VALUE;}int re=0;int count=0;int start=0;for(int i=0; i<s.length(); i++){char chari=s.charAt(i);int position=chari-' ';if(i>pos[position]){//出现过for(int j=start; j<pos[position]; j++){pos[s.charAt(j)-' ']=Integer.MAX_VALUE;count--;}start=pos[position]+1;pos[position]=i;}else{//没出现过pos[position]=i;count++;if(count>re)re=count;}}return re;}


总结:

1、数组在某种程度上也是哈希表,在这个题上用来记录字符出现的位置,如果是Integer.MAX_VALUE则代表没有出现过

2、unicode的第一个字符是空格而不是'!',这个问题上浪费了很多时间



0 0