我正在处理这个codingbat问题:如果对于字符串中的每个'*'(星号),如果在星号之前和之后都有字符,则返回true,它们是相同的。例子:sameStarChar("xy*yzz") → truesameStarChar("xy*zzz") → falsesameStarChar("*xa*az") → true我的第一次代码尝试是:public boolean sameStarChar(String str) { //boolean flag = false; for(int i =1;i< str.length()-1; i++){ if(str.charAt(i) == '*' && str.charAt(i-1) == str.charAt(i+1)){ return true; } } return false;}并且没有通过几个案例:sameStarChar("12*2*3*") → false ,sameStarChar("XY YYYY Z*") → false。但是,如果将代码更改为:public boolean sameStarChar(String str) { //boolean flag = false; for(int i =1;i< str.length()-1; i++){ if(str.charAt(i) == '*' && str.charAt(i-1) != str.charAt(i+1)){ return false; } } return true;}结果得到纠正。我不明白我的第一次尝试有什么问题。
3 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
在您的第二次尝试中,您解决了代码中唯一的问题。
如果有匹配的字符包围,您的第一次尝试将通过返回立即终止true
*
。(在这里你会错过即将到来*
的字符不匹配的 s)
您的第二种情况现在将检查您的字符串是否包含一个*
被不匹配的字符包围的字符串,并通过返回 false 来终止它。
注意:这是一个示例,您可以调整检查以检测负面情况,而不是遍历所有情况并找到正面情况。
在您的情况下,您可以做两件事(注意:我们可以安全地移除角落两个,而您已经这样做了),
如果返回true
:字符串中的每个*
都被匹配的字符包围
或者
如果返回false
:至少有一个*
被不匹配的字符包围。
ABOUTYOU
TA贡献1812条经验 获得超5个赞
在您的第一种情况下,一旦找到一个错误的有效匹配/出现,您就会返回。此外,您不会检查*
一端或两端的情况。
在第二种情况下,您正在显式搜索不匹配。此外,*
末端的极端情况自然会成为匹配/成功。
jeck猫
TA贡献1909条经验 获得超7个赞
您的第一次尝试有两个问题:
它没有考虑完全不包含任何星号的字符串的情况,循环将运行到完成,然后
false
将错误地返回。它错误地返回
true
星号的第一对匹配的邻居,而不管后面可能有任何不匹配的对。
添加回答
举报
0/150
提交
取消