嗨,我一直在做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;
}
答案 0 :(得分:2)
x
y
xPos < yPos
。(我会留下特殊情况,例如,如果找不到x
或没有y
作为另一项练习; - )
答案 1 :(得分:1)
一旦在给定字符串中发现'x'
后紧跟'y'
,您的方法就会返回true。因此,在大多数情况下,它会给您原始问题的结果不正确。
我不会给你完整的解决方案,只是提示,以便你真正学会自己解决问题。基本上,您需要确定在'y'
的最后一次出现后字符串中是否存在'x'
。为此,请使用String.lastIndexOf
。
答案 2 :(得分:1)
你的逻辑存在缺陷:只要你发现x后面跟着一个y,你就会返回true(即你结束循环并给出结果)。这不是该计划应该做的。
另外,如果字符串长度小于2,则将字符串与==进行比较。这比较了引用(指针)而不是字符串的内容。使用s1.equals(s2)比较两个字符串的内容。
以下是我对算法进行编码的方法(使用indexOf的其他解决方案可能更有效,但它们不使用循环。如果你想继续使用循环,这个解决方案应该有效。)
balanced
初始化为true 答案 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;
}