【发布时间】:2018-10-14 19:55:58
【问题描述】:
我发现了一个关于codingBat 的有趣练习,现在我有一个关于解决方案的问题。任务是:
给定一个字符串,如果字符串中
x的第一个实例紧跟着另一个x,则返回true。
我写的是:
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");
所以现在我的问题是哪种解决方案具有更好的编码风格?哪个解决方案更美观甚至更高效?
感谢所有回答
【问题讨论】:
-
假设您是另一个阅读您的解决方案的程序员。一切都在一条线返回上争论不休,需要一些额外的时间来吸收每种情况以及它们如何实际协同工作。如果编译器是好的编译器,性能实际上不会有太大差异,因为它实际上会检测变量并以不同的方式对可执行文件进行编码
-
1) 更好的编码风格:codingBat 解决方案。因为容易理解。 2)美观:codingBat 解决方案。漂亮而清晰 3) 高效:这取决于。
-
怎么样 str.indexOf("xx"); ?这更具可读性并使用标准库代码,因此性能更高。
-
@BoristheSpider:哦,好吧,我明白了你的意思:) 它专门用于 x 的第一次出现。对不起,我误解了。
-
是的,对不起@BoristheSpider 和 onCC,我的错误,没有正确阅读问题:(
标签: java optimization