我被要求检查String a是否更大,String b是否更大。所以,在考虑compareTo()方法之前,我就有了一个新的想法。
ascii之和分别存储在a&b中。ascii以打印结果。这是我的密码
private static void isInLexicographicOrder(String a, String b) {
char[] arr1 = a.toCharArray();
int asciCount1 = 0;
char[] arr2 = b.toCharArray();
int asciCount2 = 0;
long asciLength = (a.length() < b.length()) ? a.length() : b.length();
for(int i=0; i<asciLength; i++) {
asciCount1 += arr1[i];
asciCount2 += arr2[i];
}
if(asciCount1 < asciCount2) {
System.out.println("In Lexicographic Order");
}
else {
System.out.println("Not In Lexicographic Order");
}
}它对我提供的许多输入都很好,然后我找到了这个链接Java中的字符串比较,所以为了确认我在代码中使用了比较方法。
System.out.println((a.compareTo(b)) < 0 ? "In Lexicographic Order" : "Not In Lexicographic Order");现在,当我提交代码时,另一个网站说代码在一个测试用例中失败了。
样本输入
vuut
vuuuuu他们希望产出以No (即,Not In Lexicographic Order )的形式出现。但是我的逻辑和compareTo()逻辑说的是In Lexicographic Order。所以有什么不对的,我的逻辑完全正确吗?
如果我错了,这就是我得到有个问题。的链接
发布于 2017-09-06 10:03:25
你的逻辑不对。比较字符的总和是错误的,因为"bab“、"abb”和"bba“具有相同的价值,但这并没有告诉你它们中的哪一个是第一位的。
您应该分别比较每一对字符。当第一次遇到一对不相等的字符时,值较低的字符属于应该放在第一位的字符串。
for(int i=0; i<asciLength; i++) {
if (arr1[i] > arr2[i]) {
System.out.println("Not In Lexicographic Order");
return;
} else if (arr1[i] < arr2[i]) {
System.out.println("In Lexicographic Order");
return;
}
}
// at this point we know that the Strings are either equal or one
// is fully contained in the other. The shorter String must come first
if (arr1.length <= arr2.length) {
System.out.println("In Lexicographic Order");
} else {
System.out.println("Not In Lexicographic Order");
} 发布于 2017-09-06 10:03:37
comareTo方法迭代两个字符串的字符,直到到达两个字符不同的位置。返回值是两个代码点值之间的差异。
您的实现将所有代码点添加到和中,并返回此加法结果的差异。
尝试使用值abcd和dcba的方法。我希望您的方法返回0,而不是负数。
https://stackoverflow.com/questions/46072221
复制相似问题