Skip to content

Commit 9a0eab7

Browse files
authored
Merge pull request eugenp#5785 from akash-pandey/BAEL-2393
Bael 2393
2 parents fba79a0 + 11f4a4a commit 9a0eab7

2 files changed

Lines changed: 85 additions & 0 deletions

File tree

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.baeldung.algorithms.string;
2+
3+
import java.util.HashMap;
4+
import java.util.HashSet;
5+
import java.util.Map;
6+
import java.util.Set;
7+
8+
public class LongestSubstringNonRepeatingCharacters {
9+
10+
public static String getUniqueCharacterSubstringBruteForce(String input) {
11+
String output = "";
12+
for (int start = 0; start < input.length(); start++) {
13+
Set<Character> visited = new HashSet<>();
14+
int end = start;
15+
for (; end < input.length(); end++) {
16+
char currChar = input.charAt(end);
17+
if (visited.contains(currChar)) {
18+
break;
19+
} else {
20+
visited.add(currChar);
21+
}
22+
}
23+
if (output.length() < end - start + 1) {
24+
output = input.substring(start, end);
25+
}
26+
}
27+
return output;
28+
}
29+
30+
public static String getUniqueCharacterSubstring(String input) {
31+
Map<Character, Integer> visited = new HashMap<>();
32+
String output = "";
33+
for (int start = 0, end = 0; end < input.length(); end++) {
34+
char currChar = input.charAt(end);
35+
if (visited.containsKey(currChar)) {
36+
start = Math.max(visited.get(currChar) + 1, start);
37+
}
38+
if (output.length() < end - start + 1) {
39+
output = input.substring(start, end + 1);
40+
}
41+
visited.put(currChar, end);
42+
}
43+
return output;
44+
}
45+
46+
public static void main(String[] args) {
47+
if(args.length > 0) {
48+
System.out.println(getUniqueCharacterSubstring(args[0]));
49+
} else {
50+
System.err.println("This program expects command-line input. Please try again!");
51+
}
52+
}
53+
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.baeldung.algorithms.string;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import static org.junit.jupiter.api.Assertions.assertEquals;
6+
import static com.baeldung.algorithms.string.LongestSubstringNonRepeatingCharacters.getUniqueCharacterSubstring;
7+
import static com.baeldung.algorithms.string.LongestSubstringNonRepeatingCharacters.getUniqueCharacterSubstringBruteForce;
8+
9+
public class LongestSubstringNonRepeatingCharactersUnitTest {
10+
11+
@Test
12+
void givenString_whenGetUniqueCharacterSubstringBruteForceCalled_thenResultFoundAsExpectedUnitTest() {
13+
assertEquals("", getUniqueCharacterSubstringBruteForce(""));
14+
assertEquals("A", getUniqueCharacterSubstringBruteForce("A"));
15+
assertEquals("ABCDEF", getUniqueCharacterSubstringBruteForce("AABCDEF"));
16+
assertEquals("ABCDEF", getUniqueCharacterSubstringBruteForce("ABCDEFF"));
17+
assertEquals("NGISAWE", getUniqueCharacterSubstringBruteForce("CODINGISAWESOME"));
18+
assertEquals("be coding", getUniqueCharacterSubstringBruteForce("always be coding"));
19+
}
20+
21+
@Test
22+
void givenString_whenGetUniqueCharacterSubstringCalled_thenResultFoundAsExpectedUnitTest() {
23+
assertEquals("", getUniqueCharacterSubstring(""));
24+
assertEquals("A", getUniqueCharacterSubstring("A"));
25+
assertEquals("ABCDEF", getUniqueCharacterSubstring("AABCDEF"));
26+
assertEquals("ABCDEF", getUniqueCharacterSubstring("ABCDEFF"));
27+
assertEquals("NGISAWE", getUniqueCharacterSubstring("CODINGISAWESOME"));
28+
assertEquals("be coding", getUniqueCharacterSubstring("always be coding"));
29+
}
30+
31+
}

0 commit comments

Comments
 (0)