Skip to content

Commit 36afaeb

Browse files
committed
longest substring with non repeating chars
1 parent 23a7d85 commit 36afaeb

File tree

3 files changed

+118
-1
lines changed

3 files changed

+118
-1
lines changed

src/dymanicProgramming/AllPermutationsOfString.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ private String permute(char start,String string,int index){
5252

5353

5454
public static void main(String[] args) {
55-
Permute permute = new Permute("ABC");
55+
Permute permute = new Permute("ABCD");
5656
permute.printAll();
5757
}
5858
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package dymanicProgramming;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.Iterator;
6+
import java.util.List;
7+
import java.util.Map.Entry;
8+
9+
/**
10+
* Created by dheeraj on 7/14/2016.
11+
* Length of the longest substring without repeating characters
12+
* the longest substrings without repeating characters for “ABDEFGABEF” are “BDEFGA” and “DEFGAB”, with length 6.
13+
*/
14+
public class LongestSubstringWithoutRepChars {
15+
16+
17+
public static void main(String[] ss) {
18+
String s = "ABDEFGABEF";
19+
int start = 0;
20+
int length = 1;
21+
22+
int[] map = new int[256];
23+
24+
List<String> strings1 = new ArrayList<String>();
25+
map[s.charAt(0)]=0;
26+
for (int k = 1; k < s.length(); k++) {
27+
if (map[s.charAt(k)]< k && map[s.charAt(k)] > start) {
28+
if (k - start >= length) {
29+
length = k - start;
30+
Iterator<String> stringIterator = strings1.iterator();
31+
while(stringIterator.hasNext()){
32+
String s1 = stringIterator.next();
33+
if(s1.length() < length){
34+
stringIterator.remove();
35+
}
36+
}
37+
strings1.add(s.substring(start, k));
38+
}
39+
int num = map[s.charAt(k)];
40+
start = num + 1;
41+
}
42+
map[s.charAt(k)]=k;
43+
}
44+
if (s.length() - start >= length) {
45+
length = s.length() - start;
46+
Iterator<String> stringIterator = strings1.iterator();
47+
while(stringIterator.hasNext()){
48+
String s1 = stringIterator.next();
49+
if(s1.length() < length){
50+
stringIterator.remove();
51+
}
52+
}
53+
strings1.add(s.substring(start, s.length()));
54+
}
55+
System.out.print(strings1);
56+
}
57+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package dymanicProgramming;
2+
3+
import java.util.*;
4+
import java.util.Map.Entry;
5+
6+
/**
7+
* Created by dheeraj on 7/14/2016.
8+
* Length of the longest substring without repeating characters
9+
* the longest substrings without repeating characters for “ABDEFGABEF” are “BDEFGA” and “DEFGAB”, with length 6.
10+
*/
11+
public class LongestSubstringWithoutRepCharsAmazonSol {
12+
13+
14+
public static void main(String[] ss) {
15+
String s = "ABDEFGABE98765432F123";
16+
int start = 0;
17+
int length = 1;
18+
19+
HashMap<Character, Integer> characterIntegerHashMap = new HashMap<Character, Integer>();
20+
List<String> strings1 = new ArrayList<String>();
21+
characterIntegerHashMap.put(s.charAt(0), 0);
22+
for (int k = 1; k < s.length(); k++) {
23+
if (characterIntegerHashMap.containsKey(s.charAt(k))) {
24+
if (k - start >= length) {
25+
length = k - start;
26+
Iterator<String> stringIterator = strings1.iterator();
27+
while(stringIterator.hasNext()){
28+
String s1 = stringIterator.next();
29+
if(s1.length() < length){
30+
stringIterator.remove();
31+
}
32+
}
33+
strings1.add(s.substring(start, k));
34+
}
35+
int num = characterIntegerHashMap.get(s.charAt(k));
36+
start = num + 1;
37+
Iterator<Entry<Character, Integer>> iter = characterIntegerHashMap.entrySet().iterator();
38+
while (iter.hasNext()) {
39+
Map.Entry<Character, Integer> entry = iter.next();
40+
if (entry.getValue() <= num) {
41+
iter.remove();
42+
}
43+
}
44+
}
45+
characterIntegerHashMap.put(s.charAt(k), k);
46+
}
47+
if (s.length() - start >= length) {
48+
length = s.length() - start;
49+
Iterator<String> stringIterator = strings1.iterator();
50+
while(stringIterator.hasNext()){
51+
String s1 = stringIterator.next();
52+
if(s1.length() < length){
53+
stringIterator.remove();
54+
}
55+
}
56+
strings1.add(s.substring(start, s.length()));
57+
}
58+
System.out.print(strings1);
59+
}
60+
}

0 commit comments

Comments
 (0)