Thursday, June 18, 2015

Find longest non repeating sub string from String.

package practice.sample;

public class LogestNonRepeatingString {

private StringBuilder findLongestSubString(String arsStr) {
StringBuilder stCurr = new StringBuilder();
StringBuilder strPremax = null;
int curLength = 0;
int maxLength = 0;
for (int i = 0; i < arsStr.length(); i++) {
char c = Character.toLowerCase(arsStr.charAt(i));
int prevIndex = contains(c, stCurr);
if (prevIndex == -1) {
stCurr.append(c);
curLength++;
if (maxLength < curLength) {
maxLength = curLength;
}
} else {
if (strPremax == null || (strPremax.length() < stCurr.length())) {
strPremax = stCurr;
}
stCurr = new StringBuilder(stCurr.substring(prevIndex + 1))
.append(c);

}
}

return stCurr.length() > strPremax.length() ? stCurr : strPremax;
}

private int contains(char charAt, StringBuilder st) {

for (char c : st.toString().toCharArray()) {
if (c == charAt) {
return st.toString().indexOf(c);
}
}
return -1;
}

public static void main(String args[]) {
LogestNonRepeatingString l = new LogestNonRepeatingString();
StringBuilder str = l.findLongestSubString("XYZARPUA");
System.out.println(str);
}
}

No comments:

Post a Comment