Задача состоит в том, чтобы найти самую длинную подстроку в заданной строке, которая состоит из любых двух уникальных повторяющихся символов
Ex. во входной строке «aabadefghaabbaagad», самая длинная такая строка «aabbaa»
Как найти самую длинную подстроку, содержащую два уникальных повторяющихся символа
я придумал следующее решение, но хотел бы видеть, если есть более эффективный способ сделать то же самое
import java.util.*;
public class SubString {
public static void main(String[] args) {
//String inStr="defghgadaaaaabaababbbbbbd";
String inStr="aabadefghaabbaagad";
//String inStr="aaaaaaaaaaaaaaaaaaaa";
System.out.println("Input string is "+inStr);
StringBuilder sb = new StringBuilder(inStr.length());
String subStr="";
String interStr="";
String maxStr="";
int start=0,length=0, maxStart=0, maxlength=0, temp=0;
while(start+2<inStr.length())
{ int i=0;
temp=start;
char x = inStr.charAt(start);
char y = inStr.charAt(start+1);
sb.append(x);
sb.append(y);
while((x==y) && (start+2<inStr.length()))
{ start++;
y = inStr.charAt(start+1);
sb.append(y);
}
subStr=inStr.substring(start+2);
while(i<subStr.length())
{ if(subStr.charAt(i)==x || subStr.charAt(i)==y)
{ sb.append(subStr.charAt(i));
i++;
}
else
break;
}
interStr= sb.toString();
System.out.println("Intermediate string "+ interStr);
length=interStr.length();
if(maxlength<length)
{ maxlength=length;
length=0;
maxStr = new String(interStr);
maxStart=temp;
}
start++;
sb.setLength(0);
}
System.out.println("");
System.out.println("Longest string is "+maxStr.length()+" chars long "+maxStr);
}
}
Вы пробовали регулярное выражение? – user1516873
С помощью HashMap вы можете это сделать. –
[Найти] (http://en.wikipedia.org/wiki/Longest_common_substring_problem) [их] (http://stackoverflow.com/questions/2929557/java-longest-common-subsequence) [здесь] (http:// /karussell.wordpress.com/2011/04/14/longest-common-substring-algorithm-in-java/) – Jayamohan