首页 > 解决方案 > 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;
}

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

标签: java

解决方案


您的第一次尝试有两个问题:

  • 它没有考虑完全不包含任何星号的字符串的情况,循环将运行到完成,然后false将错误地返回。
  • 它错误地返回true星号的第一对匹配的邻居,而不管后面可能有任何不匹配的对。

推荐阅读