codingBat 问题:如果对于字符串中的每个 '*'(星号),则返回 true

我正在处理这个codingbat问题:如果对于字符串中的每个'*'(星号),如果在星号之前和之后都有字符,则返回true,它们是相同的。例子:


sameStarChar("xy*yzz") → true

sameStarChar("xy*zzz") → false

sameStarChar("*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;

}

结果得到纠正。我不明白我的第一次尝试有什么问题。


繁星coding
浏览 103回答 3
3回答

慕侠2389804

在您的第二次尝试中,您解决了代码中唯一的问题。如果有匹配的字符包围,您的第一次尝试将通过返回立即终止true*。(在这里你会错过即将到来*的字符不匹配的 s)您的第二种情况现在将检查您的字符串是否包含一个*被不匹配的字符包围的字符串,并通过返回 false 来终止它。注意:这是一个示例,您可以调整检查以检测负面情况,而不是遍历所有情况并找到正面情况。在您的情况下,您可以做两件事(注意:我们可以安全地移除角落两个,而您已经这样做了),如果返回true:字符串中的每个*都被匹配的字符包围或者如果返回false:至少有一个*被不匹配的字符包围。

ABOUTYOU

在您的第一种情况下,一旦找到一个错误的有效匹配/出现,您就会返回。此外,您不会检查*一端或两端的情况。在第二种情况下,您正在显式搜索不匹配。此外,*末端的极端情况自然会成为匹配/成功。

jeck猫

您的第一次尝试有两个问题:它没有考虑完全不包含任何星号的字符串的情况,循环将运行到完成,然后false将错误地返回。它错误地返回true星号的第一对匹配的邻居,而不管后面可能有任何不匹配的对。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java