Java 比较两个arrayList并获得最长的匹配字符串

Java 比较两个arrayList并获得最长的匹配字符串,java,arraylist,collections,Java,Arraylist,Collections,所以我要做的是得到两个文本文件并返回两个文件中最长的匹配字符串。我把两个文本文件都放在arraylist中,并用everyword将它们分开。这是到目前为止我的代码,但我只是想知道如何返回最长的字符串,而不仅仅是第一个找到的字符串 for(int i = 0; i < file1Words.size(); i++) { for(int j = 0; j < file2Words.size(); j++) { if(file1Words.get(i)

所以我要做的是得到两个文本文件并返回两个文件中最长的匹配字符串。我把两个文本文件都放在arraylist中,并用everyword将它们分开。这是到目前为止我的代码,但我只是想知道如何返回最长的字符串,而不仅仅是第一个找到的字符串

 for(int i = 0; i < file1Words.size(); i++)

{
    for(int j = 0; j < file2Words.size(); j++)
    {
        if(file1Words.get(i).equals(file2Words.get(j)))
        {
            matchingString += file1Words.get(i) + " ";
        }

    }
}
for(int i=0;i
我不会给你代码,但我会帮助你完成主要的IDE

您需要一个新的字符串变量“curLargestString”来跟踪当前最大的字符串。在for循环之外声明此项。现在,每当您得到两个匹配的单词时,将匹配单词的大小与“curLargestString”中单词的大小进行比较。如果新匹配的单词较大,则将“curLargestString”设置为新单词。然后,在for循环运行之后,返回curLargestString


还有一个注意事项,请确保使用空字符串初始化curLargestString。这将防止在您获得第一个匹配单词后调用其上的size函数时出错,我不会给出代码,但我将帮助您了解主要IDE

您需要一个新的字符串变量“curLargestString”来跟踪当前最大的字符串。在for循环之外声明此项。现在,每当您得到两个匹配的单词时,将匹配单词的大小与“curLargestString”中单词的大小进行比较。如果新匹配的单词较大,则将“curLargestString”设置为新单词。然后,在for循环运行之后,返回curLargestString


还有一个注意事项,请确保使用空字符串初始化curLargestString。这将防止在获得第一个匹配单词后调用其大小函数时出错。您可以使用以下代码:

String matchingString = "";
Set intersection = new HashSet(file1Words);
intersection.retainAll(file2Words)

for(String word: intersection) 
    if(word.length() > matchingString.size()) 
         matchingString = word;       

您可以使用以下代码:

String matchingString = "";
Set intersection = new HashSet(file1Words);
intersection.retainAll(file2Words)

for(String word: intersection) 
    if(word.length() > matchingString.size()) 
         matchingString = word;       

假设您的文件足够小,可以放入内存中,使用自定义比较器对它们进行排序,将长字符串放在短字符串之前,否则按字典顺序进行排序。
然后按顺序浏览这两个文件,一次只前进一个索引(其中一个索引指向两个索引中“最小”的一个),然后返回第一个匹配项。

假设您的文件足够小,可以放入内存,使用自定义比较器对它们进行排序,将长字符串放在短字符串之前,否则按字典顺序排序。
private String getLongestString(List<String> list1, List<String> list2) {
    String longestString = null;

    for (String list1String : list1) {
        if (list1String.size() > longestString.size()) {
            for (String list2String : list2) {
                if (list1String.equals(list2String)) {
                    longestString = list1String;
                }
            }
        }
    }
    return longestString;
}
然后按顺序浏览这两个文件,一次只前进一个索引(其中一个索引指向两个索引中的“最小”项),并返回第一个匹配项。

private String getLongestString(列表列表1,列表2){
private String getLongestString(List<String> list1, List<String> list2) {
    String longestString = null;

    for (String list1String : list1) {
        if (list1String.size() > longestString.size()) {
            for (String list2String : list2) {
                if (list1String.equals(list2String)) {
                    longestString = list1String;
                }
            }
        }
    }
    return longestString;
}
字符串longestString=null; for(字符串列表1字符串:列表1){ if(list1String.size()>longestString.size()){ for(字符串list2String:list2){ if(list1String.equals(list2String)){ longestString=list1String; } } } } 返回最长的字符串; }
私有字符串getLongestString(列表列表1、列表列表2){
字符串longestString=null;
for(字符串列表1字符串:列表1){
if(list1String.size()>longestString.size()){
for(字符串list2String:list2){
if(list1String.equals(list2String)){
longestString=list1String;
}
}
}
}
返回最长的字符串;
}

如果您希望在时间和空间上获得性能,与上述回复相比,您可以使用以下代码

System.out.println("Start time :"+System.currentTimeMillis());
 String longestMatch="";
 for(int i = 0; i < file1Words.size(); i++) {
    if(file1Words.get(i).length()>longestMatch.length()){
        for(int j = 0; j < file2Words.size(); j++) {
            String w = file1Words.get(i);
            if (w.length() > longestMatch.length() && w.equals(file2Words.get(j)))
                longestMatch = w;
        }
    }
System.out.println("End time :"+System.currentTimeMillis());
System.out.println(“开始时间:+System.currentTimeMillis());
字符串longestMatch=“”;
for(int i=0;ilongestMatch.length()){
对于(int j=0;jlongestMatch.length()&&w.equals(file2Words.get(j)))
最长匹配=w;
}
}
System.out.println(“结束时间:+System.currentTimeMillis());

如果您希望在时间和空间上获得性能,与上述回复相比,您可以使用以下代码

System.out.println("Start time :"+System.currentTimeMillis());
 String longestMatch="";
 for(int i = 0; i < file1Words.size(); i++) {
    if(file1Words.get(i).length()>longestMatch.length()){
        for(int j = 0; j < file2Words.size(); j++) {
            String w = file1Words.get(i);
            if (w.length() > longestMatch.length() && w.equals(file2Words.get(j)))
                longestMatch = w;
        }
    }
System.out.println("End time :"+System.currentTimeMillis());
System.out.println(“开始时间:+System.currentTimeMillis());
字符串longestMatch=“”;
for(int i=0;ilongestMatch.length()){
对于(int j=0;jlongestMatch.length()&&w.equals(file2Words.get(j)))
最长匹配=w;
}
}
System.out.println(“结束时间:+System.currentTimeMillis());

可能重复的内容不太清楚:您谈论的是最长的匹配字符串,感谢@Idos链接,然后是字符串(每个单词?),拆分?,然后连接,但它们必须相邻吗?这会改变一切以实现快速算法…如果是单词,一个好方法是使用集合…可能的重复项不是很清楚:您谈论最长的匹配字符串,感谢@Idos链接,然后谈论字符串(每个单词?),拆分?,然后连接,但它们必须相邻吗?这会改变一切,以实现快速算法…如果是单词,一个好方法是使用集合…它不是最长的字符串,只是最后一个字符串“因此,我尝试获取两个文本文件,并返回两个文件中最长的匹配字符串。”它不是最长的字符串,只是最后一个字符串“所以我要做的是获取两个文本文件并返回两个文件中最长的匹配字符串。”很好,如果单词长度不超过longestMatch,则没有理由迭代第二个arraylist。请注意,当设置longestMatch=w时,可以通过中断内部循环来进一步提高性能。很好,没有理由迭代s