编程练习

时间:2011-08-17 13:21:39

标签: java

嗨,我一直在做Javabat练习,我发现自己对这个问题有点疑惑:

我们会说String是xy平衡的,如果对于字符串中的所有'x'字符,字符串后面的某个地方都存在'y'字符。所以“xxy”是平衡的,但“xyx”不是。一个'y'可以平衡多个'x'。如果给定的字符串是xy-balanced,则返回true。

xyBalance("aaxbby") → true

xyBalance("aaxbb") → false

xyBalance("yaaxbb") → false

public boolean xyBalance(String str) {

  if(str.length() < 2){

    if(str == "x"){

    return false;

    }

    return true;

  }

  for (int i = 0 ; i < str.length()- 1;i++){

  if (str.charAt(i)=='x' && str.charAt(i + 1) == 'y'){

  return true;

  }

  }

  return false;
}

7 个答案:

答案 0 :(得分:2)

  1. 找到最后x
  2. 的位置
  3. 找到最后y
  4. 的位置
  5. 返回xPos < yPos
  6. (我会留下特殊情况,例如,如果找不到x或没有y作为另一项练习; - )

答案 1 :(得分:1)

一旦在给定字符串中发现'x'后紧跟'y',您的方法就会返回true。因此,在大多数情况下,它会给您原始问题的结果不正确。

我不会给你完整的解决方案,只是提示,以便你真正学会自己解决问题。基本上,您需要确定在'y'的最后一次出现后字符串中是否存在'x'。为此,请使用String.lastIndexOf

答案 2 :(得分:1)

你的逻辑存在缺陷:只要你发现x后面跟着一个y,你就会返回true(即你结束循环并给出结果)。这不是该计划应该做的。

另外,如果字符串长度小于2,则将字符串与==进行比较。这比较了引用(指针)而不是字符串的内容。使用s1.equals(s2)比较两个字符串的内容。

以下是我对算法进行编码的方法(使用indexOf的其他解决方案可能更有效,但它们不使用循环。如果你想继续使用循环,这个解决方案应该有效。)

  • 将布尔变量balanced初始化为true
  • 开始循环字符串的每个字符。
  • 如果当前字符是x,则将余额设置为false。
  • 如果当前字符为y,则将balance重置为true。
  • 循环结束时,返回balance的值。

答案 3 :(得分:1)

public boolean xyBalance(String str) {
    if(!str.contains("x")) { return true; }
    int x = str.lastIndexOf("x");
    int y = str.lastIndexOf("y");
    return x < y;
}

从上到下: 如果字符串中没有x,则必须进行平衡,因此返回true。 获取x的最后一个实例。 获取y的最后一个实例。 如果最后一个x在最后一个y之前,则返回true,否则返回false。

这是我能想到的最简单,最干净的方式。

答案 4 :(得分:1)

这是使用charAt()和迭代循环解决这个问题的方法:

   public boolean xyBalance(String str) {
      //start from the end of the string
      for (int i = str.length()-1;i>=0;i--)
      {
        if (str.charAt(i) == 'x')
        {
          //starting from the index of the last 'x', check the rest of the string to see if there is a 'y'
          for (int j = i; j < str.length(); j++)
          {
            if (str.charAt(j) == 'y')
            {
              //balanced
              return true;          
            }
          }
          //no 'y' found so not balanced
          return false; 
        }     
      }
      //no 'x' found at all so we are balanced
      return true;
    }

答案 5 :(得分:0)

    public boolean xyBalance(String str) {
//intialize x and y value to 0
     int x = 0;
     int y = 0;
//run a for loop and check for x value
     for (int i = 0; i < str.length(); i++) {
      if (str.charAt(i) == 'x') {
//if condition is true increment x value
       x++;
//now run a for loop for y only if x condition is true , here it will run from "i" position where we got x value
       for (int j = i; j < str.length(); j++) {
        if (str.charAt(j) == 'y') {
//once we get value which matches 'y' increment y and break from here so that it will not count more 'y'
         y++;
         break;
        }
       }
      }
     }

//after this check x and y count  
     if (x == y) {
      return true;
     } else {
      return false;
     }

    }

答案 6 :(得分:0)

我的解决方案:

public static boolean xyBalance(String str) {

      boolean xBefore = false;
      boolean yAfter = false;

      for (int i = 0; i < str.length(); i++) {
        if (str.charAt(i)=='x') {
            xBefore = true;
            yAfter = false;
        }
        if (str.charAt(i)=='y') {
            xBefore = false;    
            yAfter = true;
        }

    }
      if (yAfter || xBefore==false) {
          return true;
      }

      return false;
}