programming-examples/java/Basics/Program to Find longest substring without repeating characters (Java).java

78 lines
2.5 KiB
Java
Raw Normal View History

2019-11-18 14:44:36 +01:00
/*
Given a string, find the longest substrings without repeating characters. Iterate through the given string, find the longest maximum substrings.
*/
import java.util.HashSet;
import java.util.Set;
public class MyLongestSubstr
{
private Set<String> subStrList = new HashSet<String>();
private int finalSubStrSize = 0;
public Set<String> getLongestSubstr(String input)
{
//reset instance variables
subStrList.clear();
finalSubStrSize = 0;
// have a boolean flag on each character ascii value
boolean[] flag = new boolean[256];
int j = 0;
char[] inputCharArr = input.toCharArray();
for (int i = 0; i < inputCharArr.length; i++)
{
char c = inputCharArr[i];
if (flag[c])
{
extractSubString(inputCharArr,j,i);
for (int k = j; k < i; k++)
{
if (inputCharArr[k] == c)
{
j = k + 1;
break;
}
flag[inputCharArr[k]] = false;
}
}
else
{
flag[c] = true;
}
}
extractSubString(inputCharArr,j,inputCharArr.length);
return subStrList;
}
private String extractSubString(char[] inputArr, int start, int end)
{
StringBuilder sb = new StringBuilder();
for(int i=start; i<end; i++)
{
sb.append(inputArr[i]);
}
String subStr = sb.toString();
if(subStr.length() > finalSubStrSize)
{
finalSubStrSize = subStr.length();
subStrList.clear();
subStrList.add(subStr);
}
else if(subStr.length() == finalSubStrSize)
{
subStrList.add(subStr);
}
return sb.toString();
}
public static void main(String a[])
{
MyLongestSubstr mls = new MyLongestSubstr();
System.out.println(mls.getLongestSubstr("java2novice"));
System.out.println(mls.getLongestSubstr("java_language_is_sweet"));
System.out.println(mls.getLongestSubstr("java_java_java_java"));
System.out.println(mls.getLongestSubstr("abcabcbb"));
}
}