【问题标题】:Java, string difference algorithmJava,字符串差分算法
【发布时间】:2015-02-06 07:03:06
【问题描述】:

我想获得有关以下代码的反馈。有什么办法可以提高它的性能吗?也许您知道可能打印错误输出的输入值?该代码的想法是计算 s2 中未在 s1 中列出的唯一字符。 Ideone.com URL.

代码:

class Combine {
    public static void main(String[] args) throws IOException {
        BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
        String s1 = bi.readLine();
        String s2 = bi.readLine();

        String usedCharacters = "";

        for(int i = 0; i < s2.length(); i++) {
            String c = Character.toString(s2.charAt(i));
            if(!usedCharacters.contains(c) && !s1.contains(c)) 
                usedCharacters += c;
        }

        System.out.println(usedCharacters.length());
    }
}

【问题讨论】:

  • 仅供参考,关于优化现有工作代码的问题更适合codereview.se
  • 这个问题似乎离题了,因为它是关于优化未损坏的现有代码。考虑改为发布到 codereview.stackexchange.com。

标签: java string difference


【解决方案1】:

我认为这种性能已经足够好,任何改进都不会产生敏感的差异。

【讨论】:

  • 输入呢?您知道此代码可能包含的任何值吗?
【解决方案2】:

我认为你应该尝试迭代更大或更小的字符串(测量时间开销)——这样可以节省一些 CPU 时间。

【讨论】:

    【解决方案3】:

    我认为这是相当好的优化,但您可能应该检查 null,因为如果您将 null 值传递给它,它将失败。

    【讨论】:

      【解决方案4】:

      如果您的输入相对较小(例如由用户在控制台上键入),那么我认为您的解决方案没有性能问题(除了另一个答案建议的空检查)。

      如果输入很大,例如命令行上的重定向文件为兆字节或更多,那么我认为您的解决方案将产生 O(n^2) 运行时性能,因为它通过 s2 进行迭代,并且 contains 方法调用也将迭代整个字符串。

      另一种算法是对两个输入字符串进行排序,然后遍历它们以计算差异。这将导致 O(n log n) 的性能。

      【讨论】:

        【解决方案5】:

        没试过,但有一个想法:

        class Combine {
        public static void main(String[] args) throws IOException {
            BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
            String s1 = bi.readLine();
            String s2 = bi.readLine();
        
            int count = 0;
            for(char c : new HashSet<Char>(s2.toCharArray())) {
             if(s1.contains(c)) count++
            }
        
        
            System.out.println(count);
        }
        

        }

        【讨论】:

          猜你喜欢
          • 2013-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-27
          • 2013-09-26
          • 2011-03-17
          相关资源
          最近更新 更多