Палиндромные предложения с использованием стека в Java

java stack palindrome

750 просмотра

1 ответ

Цель этого кода - вернуть все палиндромы, игнорируя пунктуацию, и не учитывать регистр символов. Код может работать с базовыми палиндромами, но я считаю, что проблема заключается в пунктуации.

Я хотел бы знать, как заставить этот код возвращать палиндром полного предложения, а также чтобы он возвращал истину, если нет ничего, кроме пунктуации, поскольку при этом должна отображаться пустая строка.

import java.util.*;

public class Palindromes {
    public static boolean isPalindromeSentence(String sentence) {
        Stack <String> p = new Stack<>();
        boolean c;
        for (int i = 0; i < sentence.length(); i++) {
            c = Character.isAlphabetic(sentence.charAt(i));
            char a;
            if (c == true)  {
                a = Character.toLowerCase(sentence.charAt(i));
                p.push (a + "");
            }
            else if (c == false)    {
                i++;
            }
        }
        String reversed = "";
        while (!p.isEmpty())    {
            reversed += p.pop();
        }

        return sentence.equals(reversed);
    }
}
Автор: Ryota Источник Размещён: 08.11.2019 11:08

Ответы (1)


0 плюса

Перед алгоритмом очистите ввод всех не буквенных символов и сделайте его также строчными:

sentence = sentence.toLowerCase().replaceAll("[^a-z]", "");

Стиль плюс совет по избежанию ошибок: никогда не сравнивайте логическое значение в ifтесте, просто используйте его как есть и избегайте лишних elseтестов. Например, вместо:

if (c == true)  {
    ...
} else if (c == false)  {
    ...
}

только что

if (c) {
    ...
} else {
    ...
}

Это не только намного яснее и чище, но и позволяет избежать шансов на неприятную ошибку «случайного назначения»

if (c = true) { // oops! Compiles and executes, but silently assigns
Автор: Bohemian Размещён: 20.08.2016 11:55
Вопросы из категории :
32x32