MyApproach
为了得到一个中间词,我首先找到了每个String的长度。并检查了多个获取单词的条件,如
如果2个单词的长度相等,如果没有单词具有相同的长度,并且最后2个单词具有相同的长度,我逐个字符地检查它们并使用compareTo作为其余逻辑。
但我无法满足一个测试用例。
Qn任何人都可以在我的代码中指导我做错了什么。
public String middleWord(String word1,String word2,String word3)
{
boolean b1=false;
boolean b2=false;
boolean b3=false;
int l1=word1.length();
int l2=word2.length();
int l3=word3.length();
if((l1>=l2)&&(l1>l3))
{
int p1=word1.compareTo(word2);
System.out.println(p1);
if(p1<0)
{
b1=true;
}
else
{
b2=true;
}
}
else if((l2>=l3)&&(l2>l1))
{
int p1=word2.compareTo(word3);
System.out.println(p1);
if(p1<0)
{
b2=true;
}
else
{
b3=true;
}
}
else if((l3>=l1)&&(l3>l2))
{
int p1=word1.compareTo(word3);
System.out.println(p1);
if(p1<0)
{
b1=true;
}
else
{
b3=true;
}
}
else if((l1>l2)&&(l1>l3))
{
if(l2>l3)
{
b2=true;
}
else if(l3>l2)
{
b3=true;
}
else
{
int p1=word2.compareTo(word3);
System.out.println(p1);
if(p1<0)
{
b2=true;
}
else
{
b3=true;
}
}
}
else if((l2>l3)&&(l2>l1))
{
if(l1>l3)
{
b1=true;
}
else if(l3>l1)
{
b3=true;
}
else
{
int p1=word1.compareTo(word3);
System.out.println(p1);
if(p1<0)
{
b1=true;
}
else
{
b3=true;
}
}
}
else if((l3>l1)&&(l3>l2))
{
if(l1>l2)
{
b1=true;
}
else if(l2>l1)
{
b2=true;
}
else
{
int p1=word1.compareTo(word2);
System.out.println(p1);
if(p1<0)
{
b1=true;
}
else
{
b2=true;
}
}
}
else if((l1==l2)&&(l1==l3))
{
int p1=word1.compareTo(word1);
int p2=word1.compareTo(word2);
int p3=word1.compareTo(word3);
System.out.println(p1);
System.out.println(p2);
System.out.println(p3);
if((p1<p2) &&(p1<p3))
{
if(p2<p3)
{
b2=true;
}
else
{
b3=true;
}
}
else if((p2<p3) &&(p2<p1))
{
if(p1<p3)
{
b1=true;
}
else
{
b3=true;
}
}
else if((p3<p2) &&(p3<p1))
{
if(p2<p1)
{
b2=true;
}
else
{
b1=true;
}
}
}
if(b1==true)
return word1;
else if(b2==true)
return word2;
else
return word3;
}
}
Parameters Actual Output Expected Output
'he' 'her' 'here' he her
答案 0 :(得分:1)
对于你的midWord特定情况(“他”,“她”,“这里”),你正在击中第三个if if子句:
else if((l3>=l1)&&(l3>l2))
{
int p1=word1.compareTo(word3);
System.out.println(p1);
if(p1<0)
{
b1=true;
}
else
{
b3=true;
}
}
在这种情况下,l1 = 2, l2 = 3, l3 = 4
,p1 = a -ve number
因为单词1的长度较小而将b1
设置为true
。然后返回word1
,因为:
if(b1==true)
return word1;
else if(b2==true)
return word2;
else
return word3;
所以是的,你的逻辑错了。好像你首先将字符串与长度进行比较,然后按字典顺序进行比较。在这种情况下,您可以覆盖compareTo函数并对它们进行排序。然后返回第二个元素,这是一个更清洁的解决方案。
似乎你不需要比较长度,只想按字典顺序比较它们,你不能使用Collections或Arrays排序方法。在这种情况下,您可以使用Java String的compareTo函数。
public static String middleWord1(String word1, String word2, String word3) {
if (word1.compareTo(word2) == 0 || word1.compareTo(word3) == 0)
// word1 == word2 or word1 == word3
return word1;
else if (word2.compareTo(word1) == 0 || word2.compareTo(word3) == 0)
// word2 == word1 or word2 == word3
return word2;
else if (word3.compareTo(word1) == 0 || word3.compareTo(word2) == 0)
// word3 == word1 or word3 == word2
return word3;
else if ((word2.compareTo(word1) < 0 && word1.compareTo(word3) < 0) ||
(word3.compareTo(word1) < 0 && word1.compareTo(word2) < 0))
// word2 < word1 < word3 or word3 < word1 < word2
return word1;
else if ((word1.compareTo(word2) < 0 && word2.compareTo(word3) < 0) ||
(word3.compareTo(word2) < 0 && word2.compareTo(word1) < 0))
// word1 < word2 < word3 or word3 < word2 < word1
return word2;
else
// word1 < word3 < word2 or word2 < word3 < word1
return word3;
}