Java-查找最长子字符串-LinkedList问题
我得到了一个任务来实现算法,该算法将从两个给定字符串中找到最长的子字符串: 输入:Java-查找最长子字符串-LinkedList问题,java,string,list,substring,Java,String,List,Substring,我得到了一个任务来实现算法,该算法将从两个给定字符串中找到最长的子字符串: 输入: String s1="AAABBA"; String s2="ABAABBAAA"; 因此,这将是AABBA。所以我实现了一个返回字符串的方法,但它得到了我-如果有两个子字符串具有相等的最大可能长度,该怎么办?于是我决定改用LinkedList 例如: String s1="ABCIJK"; String s2="ABCDEFGHIJK"; 所以我期望这里有两个子串,分别是ABC和IJK 我有密码: impo
String s1="AAABBA";
String s2="ABAABBAAA";
因此,这将是AABBA。所以我实现了一个返回字符串的方法,但它得到了我-如果有两个子字符串具有相等的最大可能长度,该怎么办?于是我决定改用LinkedList
例如:
String s1="ABCIJK";
String s2="ABCDEFGHIJK";
所以我期望这里有两个子串,分别是ABC和IJK
我有密码:
import java.util.LinkedList;
public class SubstringFinder {
public static LinkedList<String> findTheLongestSubstring(String s1, String s2)
{
LinkedList<String> allFound = new LinkedList<String>();
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<s1.length();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));
}
}
import java.util.LinkedList;
公共类子字符串查找器{
公共静态LinkedList查找LongESTSubstring(字符串s1、字符串s2)
{
LinkedList allFound=新建LinkedList();
字符串最长=”;
如果(s1.length()>s2.length())
{
s1=s1+s2;
s2=s1.子字符串(0,(s1.length()-s2.length());
s1=s1.子字符串(s2.长度());
}
对于(int j=0;j=0;i--)
{
if(s1.子字符串(j,j+i).length()>=最长的.length()&&s2.包含(s1.子字符串(j,j+i)))
{
全部找到。移除(最长的);
最长=s1.子串(j,j+i);
全部找到。添加(最长的);
}
}
}
返回所有找到的;
}
公共静态void main(字符串[]args){
//字符串s1=“ABCIJK”;
//字符串s2=“ABCDEFGHIJK”;
字符串s1=“AAABBA”;
字符串s2=“ababaaa”;
System.out.println(findthelongeststring(s1,s2));
}
}
它只返回“IJK”而不是[ABC,IJK]。当我评论
找到所有。删除(最长的)
在[ABC,IJK]的情况下,它可以正常工作,但随后它还将[AAA]添加到[AABBA]结果中,这是不期望的。有没有办法修改条件,使其只向列表中添加最长的字符串?或者删除之前所有较短的字符串
提前感谢我已经相应地修改了方法,请查看我的内联评论
public static LinkedList<String> findTheLongestSubstring(String s1, String s2)
{
LinkedList<String> allFound = new LinkedList<String>();
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<s1.length();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)))
{
theLongest = s1.substring(j, j+i);
// before adding any string check the length of existing string if it is less then remove it
if (allFound.size() > 0 && allFound.getFirst().length() < theLongest.length()) {
allFound.removeFirst();
}
allFound.add(theLongest);
}
}
}
return allFound;
}
public static LinkedList findTheLongestSubstring(字符串s1、字符串s2)
{
LinkedList allFound=新建LinkedList();
字符串最长=”;
如果(s1.length()>s2.length())
{
s1=s1+s2;
s2=s1.子字符串(0,(s1.length()-s2.length());
s1=s1.子字符串(s2.长度());
}
对于(int j=0;j=0;i--)
{
if(s1.子字符串(j,j+i).length()>=最长的.length()&&s2.包含(s1.子字符串(j,j+i)))
{
最长=s1.子串(j,j+i);
//在添加任何字符串之前,请检查现有字符串的长度(如果小于),然后将其删除
if(allFound.size()>0&&allFound.getFirst().length()