我有一个实现算法的任务,该算法将从两个给定的字符串中找到最长的子字符串:
输入:
String s1="AAABBA";
String s2="ABAABBAAA";
因此,它将是AABBA.所以我实现了一个返回String的方法,但是后来得到了我-如果有两个相等且最大可能长度的子字符串呢?那是我决定改用LinkedList的时候.
例如:
String s1="ABCIJK";
String s2="ABCDEFGHIJK";
所以我期望这里实际上是两个子字符串,分别是ABC和IJK.
我有代码:
import java.util.LinkedList;
public class SubstringFinder {
public static LinkedList findTheLongestSubstring(String s1, String s2)
{
LinkedList allFound = new LinkedList();
String theLongest="";
if(s1.length()>s2.length())
{
s1 = s1 + s2;
s2 = s1.substring(0, (s1.length() - s2.length()));
s1 = s1.substring(s2.length());
}
for(int j=0;j
{
for(int i=s1.length()-j; i>=0;i--)
{
if(s1.substring(j,j+i).length()>=theLongest.length() && s2.contains(s1.substring(j,j+i)))
{
allFound.remove(theLongest);
theLongest=s1.substring(j,j+i);
allFound.add(theLongest);
}
}
}
return allFound;
}
public static void main(String[] args) {
//String s1="ABCIJK";
//String s2="ABCDEFGHIJK";
String s1="AAABBA";
String s2="ABAABBAAA";
System.out.println(findTheLongestSubstring(s1,s2));
}
}
而且它只返回“ IJK”而不是[ABC,IJK].当我评论
allFound.remove(theLongest)
在[ABC,IJK]的情况下可以正常工作,但随后也会在[AABBA]结果中添加[AAA],这是不期望的.有什么方法可以修改条件,以便仅将最长的字符串添加到列表中?还是删除所有以前的较短的字符串?
提前致谢