Minimum Window Substring &&& Longest Substring Without Repeating Characters 快慢指针,都不会退,用hashmap或者其他结构保证


1


public class Solution { 2 public static int lengthOfLongestSubstring(String s) { 3 4 char[] arr = s.toCharArray(); 5 int pre = 0; 6 7 HashMap<Character, Integer> map = new HashMap<Character, Integer>(); 8 9 for (int i = 0; i < arr.length; i++) { 10 if (!map.containsKey(arr[i])) { 11 map.put(arr[i], i); 12 } else { 13 pre = pre > map.size() ? pre : map.size(); 14 i = map.get(arr[i]); 15 map.clear(); 16 } 17 } 18 19 return Math.max(pre, map.size()); 20 } 21 }

 

 1 public class Solution {
 2     public String minWindow(String S, String T) {
 3         char s[]=S.toCharArray();
 4         if(S=="")return "";
 5         int beg=0;
 6         int end=0;
 7         int d[]=new  int[128];
 8         int size=0;
 9         for(int i=0;i<T.length();i++)
10         {
11             if(d[t[i]]==0) size++;
12             d[t[i]]++;
13         }
14         int d2[]=new int[128];
15         int s1=0;
16         boolean flag=false;
17         
18         while(end<s.length)
19         {
20             if(d[s[end]]==0) {end++;continue;}
21              d2[s[end]]++; 
22              if(d2[s[end]]==d[s[end]]) s1++;
23              end++;
24              if(s1==size)
25              {
26                  while(d2[s[beg]]>d[s[beg]]||d[s[beg]]==0) {d2[s[beg]]--;beg++;}
27                  flag=true;
28                  break;
29              }
30            
31             
32         }
33        if(!flag) return "";
34         int aend=end-1;
35         int abeg=beg;
36         int amin=end-beg;
37         
38     
39          while(end<s.length)
40          {
41              if(d[s[end]]==0){end++;continue;}
42              d2[s[end]]++;
43             
44             while((d2[s[beg]]>d[s[beg]])||d[s[beg]]==0) { 
45                 d2[s[beg]]--;beg++;
46                 if(end-beg+1<amin)
47                 {amin=end-beg+1;
48                 aend=end;
49                 abeg=beg;
50             
51                 }
52             
53                 
54                 
55                 
56             }
57             end++;
58              
59          }
60         
61             
62         
63         // 
64         return S.substring(abeg,aend+1);
65         
66         
67         
68         
69         
70         
71       
72         
73     }
74 }
View Code

 

posted @ 2014-07-28 19:00  hansongjiang8  阅读(113)  评论(0编辑  收藏  举报