F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

[Leetcode] Longest Substring Without Repeating Characters

这道题目使用的方法具有非常大的普遍性,实际上是两个指针。

一个指针记录当前所记录的子串的开始,另一个是当前遍历的位置,如果产生了重复,那么需要进行修正,实际上是对子串进行收缩。

从当前子串开始位置到重复位置,重置相应的字符为违被搜索状态。在收缩之前需要进行,最长子串长度的更新。

 

 1 public class Solution {
 2     public int lengthOfLongestSubstring(String s) {
 3         int startindex[]=new int[256];
 4         for(int i=0;i<256;i++){
 5             startindex[i]=-1;
 6         }
 7         int maxlength=0;
 8         int curlength=0;
 9         int countstart=0;
10         for(int i=0;i<s.length();i++){
11             char c=s.charAt(i);
12             int index = (int) c;
13             if(startindex[index]==-1){
14                 startindex[index]=i;
15                 curlength++;
16             }else{
17                 maxlength = curlength>maxlength?curlength:maxlength;
18                 //clear some
19                 for(int k=countstart;k<startindex[index];k++){
20                     startindex[(int)(s.charAt(k))]=-1;
21                 }
22                 curlength=i-startindex[index];//not the maximum
23                 countstart=startindex[index]+1;
24                 startindex[index]=i;
25             }
26             if(i==s.length()-1){
27                 if(curlength>maxlength){
28                     maxlength=curlength;
29                 }
30             }
31         }
32         return maxlength;
33     }
34 }

 

posted on 2015-08-12 21:20  F_G  阅读(150)  评论(0编辑  收藏  举报