BAEL-2393: Longest Sub-string without repeating characters.
This commit is contained in:
parent
5aef6d9d6b
commit
09261fb3b9
|
@ -0,0 +1,51 @@
|
||||||
|
package com.baeldung.algorithms.string;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class LongestSubstringNonRepeatingCharacters {
|
||||||
|
|
||||||
|
public static String getNonRepeatingCharactersBruteForce(String input) {
|
||||||
|
String output = "";
|
||||||
|
for (int start = 0; start < input.length(); start++) {
|
||||||
|
Set<Character> visited = new HashSet<>();
|
||||||
|
int end = start;
|
||||||
|
for (; end < input.length(); end++) {
|
||||||
|
char currChar = input.charAt(end);
|
||||||
|
if (visited.contains(currChar)) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
visited.add(currChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (output.length() < end - start + 1) {
|
||||||
|
output = input.substring(start, end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getNonRepeatingCharacters(String input) {
|
||||||
|
Map<Character, Integer> visited = new HashMap<>();
|
||||||
|
String output = "";
|
||||||
|
for (int start = 0, end = 0; end < input.length(); end++) {
|
||||||
|
char currChar = input.charAt(end);
|
||||||
|
if(visited.containsKey(currChar)) {
|
||||||
|
start = Math.max(visited.get(currChar)+1, start);
|
||||||
|
}
|
||||||
|
if(output.length() < end - start + 1) {
|
||||||
|
output = input.substring(start, end+1);
|
||||||
|
}
|
||||||
|
visited.put(currChar, end);
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String input = "CODINGISAWESOME";
|
||||||
|
System.out.println(getNonRepeatingCharacters(input));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package com.baeldung.algorithms.string;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class LongestSubstringNonRepeatingCharactersTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenString_whenGetNonRepeatingCharactersBruteForceCalled_thenResultFoundAsExpected() {
|
||||||
|
String input = "CODINGISAWESOME";
|
||||||
|
Assertions.assertEquals("NGISAWE", LongestSubstringNonRepeatingCharacters.getNonRepeatingCharactersBruteForce(input));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenString_whenGetNonRepeatingCharactersCalled_thenResultFoundAsExpected() {
|
||||||
|
String input = "CODINGISAWESOME";
|
||||||
|
Assertions.assertEquals("NGISAWE",LongestSubstringNonRepeatingCharacters.getNonRepeatingCharacters(input));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue