【问题标题】:Find the difference between the strings in arraylist in java [closed]查找java中arraylist中字符串之间的区别[关闭]
【发布时间】:2021-07-16 09:32:01
【问题描述】:
List<String> a = new ArrayList<>();
        a.add("test");
        a.add("test2");
        a.add("mark3");
        a.add("testtest");
        a.add("testapple");
        a.add("test1apple");
        a.add("markapple");
        a.add("testmark");
        a.add("test2");
        a.add("mark3");
        a.add("testapple1");

同样,列表的大小是 10000(可以超过 10000)。在这里我需要找到列表中存在的重复值(test2,mark3)以及差异 = 1 的值是什么(test,test2,testapple,test1apple,testapple1)

我需要显示如下内容
重复:test2,mark3
1 区别:test,test2,testapple,test1apple,testapple1

为此,我采用传统方式循环列表以获得如下结果

for(i=0;i<a.size();i++){
    for(j=i+1;j<a.size();j++){
       // logic
    }
}

无论我做得正确还是有其他方法可以实现,因为如果我使用上述循环逻辑,我将面临性能问题

【问题讨论】:

  • test 和 testapple 会给出 '5' 的 diif 但我想要的是 diff = '1' 的值是什么?
  • @GhostCat testtest2 之间存在“1 个差异”。 testappletestapple1 之间也有 1 个区别。
  • “test”和“text”有什么区别?
  • 差异为 1 ('x')

标签: java string list


【解决方案1】:

使用Set 以获得更好的性能。

List<String> a = new ArrayList<>();
a.add("test");
a.add("test2");
a.add("mark3");
a.add("testtest");
a.add("testapple");
a.add("markapple");
a.add("testmark");
a.add("test2"); // dup
a.add("mark3"); // dup
a.add("testapple1");
a.add("test2"); // triple

Set<String> set = new LinkedHashSet<>();
Set<String> dup = new HashSet<>();
for (String s : a)
    if (! set.add(s)) // add returns false if value already seen
        dup.add(s);
System.out.println("duplicates: " + dup);

for (String s : set) {
    if (s.length() > 1) {
        String base = s.substring(0, s.length() - 1);
        if (set.contains(base)) {
            System.out.println("1 difference: " + base + ", " + s);
        }
    }
}

输出

duplicates: [test2, mark3]
1 difference: test, test2
1 difference: testapple, testapple1

【讨论】:

  • 如果值有 test1apple 怎么办?这里的值可以是任何类型的字符串。
  • @SundarG 由于“difference = 1”目前在问题中被定义为相同的字符串,除了其中一个在末尾有 1 个额外字符,这是我不需要解决的问题.这个答案完美地回答了这个问题,具有高性能结果。
  • 但是上面的逻辑不会给出想要的结果。
  • @SundarG 它给出了问题的预期结果,因为问题已被指定。
猜你喜欢
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
相关资源
最近更新 更多