如何使用子字符串而不是字符来检查单词是否是回文的?

k75qkfdt  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(415)

===========================================================================
我刚刚意识到我的错误。
而不是写作

test1= do.substring(x,x + 1);
        test2= do.substring(count - 1 - x, count - x);

我写道

test1= do.substring(x,x + 1);
        test1= do.substring(count - 1 - x);

我不知道你必须“结束”一个子串,我用这个答案。考虑到它的优势,我想知道是否有人能解释为什么它在我的情况下不起作用。https://stackoverflow.com/a/40213223/14488701

r55awzrz

r55awzrz1#

我认为在使用子字符串时不需要对字符串进行迭代。您可以简单地比较左子串和右反转子串,如下所示:

private static boolean isPalindrome(final String input) {
    int length = input.length();
    int middleIndex = (length % 2 == 0 ) ?
            (length / 2 ) : (length / 2 + 1);
    String left = input.substring(0, length / 2);
    String right = input.substring(middleIndex, length);

    // Compare left string with reverse(right)
    return left.equals(new StringBuilder(right).reverse().toString());
}
mo49yndu

mo49yndu2#

为了得到一个只有一个字符的字符串 String#substring(int beginIndex, int endIndex) ,的值 endIndex 需要等于 beginIndex + 1 例如 "Hello".substring(1, 2) 相当于 String.valueOf("Hello".charAt(1)) .
演示:

public class Main {
    public static void main(String[] args) {
        // Test strings
        String[] arr = { "dad", "malayalam", "papa" };
        for (String s : arr) {
            System.out.println(isPallindrome(s));
        }
    }

    static boolean isPallindrome(String s) {
        int len = s.length();
        for (int i = 0; i < len / 2; i++) {
            if (!s.substring(i, i + 1).equals(s.substring(len - i - 1, len - i))) {
                return false;
            }
        }
        return true;
    }
}

输出:

true
true
false
uyto3xhc

uyto3xhc3#

尝试将字符串转换为 charArray 然后定义一个从数组开始索引,另一个从数组结束索引,并相互比较:如果它们总是相同的,那么它是一个回文,否则它不是。

String input = "POP";
char [] values = input.toCharArray();
boolean isPalindrome = true;

for (int i = 0, j = values.length-1; i < values.length /2 && j >= values.length/2; i++, j--) {
    if(values[i] != values[j]) {
        isPalindrome = false;
        break;
    }
}
if(isPalindrome) {
    System.out.println(input + " is a Palindrom");
} else {
    System.out.println(input + " is not a Palindrom");
}

相关问题