Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-查找最长子字符串-LinkedList问题_Java_String_List_Substring - Fatal编程技术网

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()