首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序设计练习

程序设计练习
EN

Stack Overflow用户
提问于 2011-08-17 13:21:38
回答 7查看 3.9K关注 0票数 1

嗨,我一直在做Javabat练习,我发现自己在这个问题上遇到了一些麻烦:

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

代码语言:javascript
复制
xyBalance("aaxbby") → true

xyBalance("aaxbb") → false

xyBalance("yaaxbb") → false

代码语言:javascript
复制
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;
}
EN

回答 7

Stack Overflow用户

发布于 2011-08-17 13:25:11

找到最后一个x

  • Find的位置,最后一个y

  • Return xPos < yPos.

的位置

(我将保留特殊情况,例如如果没有发现xy作为另一个练习;)

票数 2
EN

Stack Overflow用户

发布于 2011-08-17 13:24:31

一旦您的方法找到一个'x',然后在给定字符串中紧接着一个'y',它就会返回true。所以在大多数情况下,它会给你原来的问题带来不正确的结果。

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

票数 1
EN

Stack Overflow用户

发布于 2011-08-17 13:29:46

你的逻辑是有缺陷的:当你发现一个x直接跟在y后面的时候,你就返回true (即结束循环并给出结果),这不是程序应该做的。

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

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

  • 将布尔变量balanced初始化为true
  • ,在字符串的每个字符上开始循环。如果当前字符为x,则设置平衡为false。如果当前字符为y,则将
  • 重置为真。

H 110循环结束后返回平衡值。H 211<代码>F 212

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7093565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档