我在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");
所以现在我的问题是哪种解决方案具有更好的编码风格?哪种解决方案更美观或更有效?
感谢所有答案
答案 0 :(得分:3)
我可能会这样编码:
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');
}