我正在處理這個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
提交
取消