java - 这些解决方案中的哪一个具有更好的风格/性能?
问题描述
我发现了一个关于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");
所以现在我的问题是哪个解决方案具有更好的编码风格?哪种解决方案更美观甚至更高效?
感谢所有答案
解决方案
我可能会这样编码:
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');
}
推荐阅读
- javascript - 如何将数组的 AJAX 列数据传递给 JS 函数?
- android - DataSource.Factory 未使用正确的变量值 Android Paging
- java - Java 8 功能接口和接口
- git - git push 挂起...可能与 ssh 配置相关
- oracle - Oracle Enterprise Manager 11g Database Control - 代理无法访问
- ios - iOS:在自定义框架中条纹 Apple Pay
- google-cloud-firestore - 在 Firestore 中,如何忽略不需要的创建输入?
- python - Python与串行设备通信
- python - statsmodels.tsa.api-0.9.0 ZeroDivisionError:除以零
- command-line - Vlang cli 示例不能以直观的方式工作