首页 > 解决方案 > 这些解决方案中的哪一个具有更好的风格/性能?

问题描述

我发现了一个关于codingBat 的有趣练习,现在我有一个关于解决方案的问题。任务是:

给定一个字符串,true如果字符串中的第一个实例x紧跟另一个,则返回x

我写的是:

boolean doubleX(String str) {
      return str.contains("x") ? str.indexOf('x') == str.length() - 1 ? false : str.charAt(str.indexOf('x')) == str.charAt(str.indexOf('x') + 1) : false;
}

他们在页面上的解决方案是:

boolean doubleX(String str) {
   int i = str.indexOf("x");
   if (i == -1) return false; // no "x" at all

   // Is char at i+1 also an "x"?
   if (i+1 >= str.length()) return false; // check i+1 in bounds?
      return str.substring(i+1, i+2).equals("x");

所以现在我的问题是哪个解决方案具有更好的编码风格?哪种解决方案更美观甚至更高效?

感谢所有答案

标签: javaoptimization

解决方案


我可能会这样编码:

boolean doubleX(String str) 
{
    int index = str.indexOf("x");
    return (index >= 0 && index == str.indexOf("xx", index));
}

可能不是性能最高的,但它可以处理所有可能性。

indexOf("x")如果并且indexOf("xx")相距很远(不必要的长时间搜索"xx")或者如果两个索引都非常高(长时间搜索完成两次) ,它可能会很慢。

因此,另一个稍微不那么直观但性能更高的解决方案可能是:

boolean doubleX(String str)
{
    int index = str.indexOf("x");
    return (index >= 0 && index < str.length() - 1 && str.charAt(index + 1) == 'x');
}

推荐阅读