Для двумерного массива символов проверьте, можно ли переставить символы, чтобы сформировать палиндром как по строкам, так и по столбцам

Я столкнулся с этим вопросом на сайте кодирования. Здесь мы должны проверить, можно ли переставить сетку, чтобы сформировать палиндром как по строкам, так и по столбцам.

Мой подход заключался в проверке сначала всех строк, а затем столбцов. Если какой-либо из них не может стать палиндромом, выведите NO else, выведите YES.

Но моя программа проходит только 15 тестов из 50.

Ниже приведен код, который я использовал:

public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);

    int testCases = scanner.nextInt();
    for(int i=0; i<testCases; i++)
    {
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        scanner.nextLine();
        boolean printYes = true;

        String[] input = new String[n];
        for(int k=0; k<n; k++)
        {
            input[k] = scanner.nextLine();
            boolean check = canFormPalindrome(input[k]);
            if (!check)
            {
                printYes= false;
            }
        }


        if (printYes)
        {
            for(int k=0; k<m; k++)
            {
                String s = "";
                for(int l=0; l<n; l++)
                {
                    s=s+input[l].charAt(k);
                }
                boolean check = canFormPalindrome(s);
                if (!check)
                {
                    System.out.println("NO");
                    printYes = false;
                    break;
                }
            }

            if (printYes)
            {
                System.out.println("YES");
            }
        }
        else
        {
            System.out.println("NO");
        }

    }

    scanner.close();


}

static boolean canFormPalindrome(String str) {

    int count[] = new int[256];
    Arrays.fill(count, 0);

    for (int i = 0; i < str.length(); i++)
    count[(int)(str.charAt(i))]++;

    int odd = 0;
    for (int i = 0; i < 256; i++) 
    {
    if ((count[i] & 1) == 1)
        odd++;

    if (odd > 1)
        return false;
    }

    return true;
}

Могу ли я узнать, почему этот вопрос получил отрицательный рейтинг?

Max Newton 01.07.2018 13:15

Когда вы вводите код, вам нужно задать более конкретный вопрос (например, почему этот оператор for не запускается). Иногда, когда ваш вопрос не ясен, вы можете получить отрицательные голоса. На мой взгляд, это немного строго, и у меня была такая же проблема. когда я начинаю задавать вопросы здесь. Тем не менее, это сообщество, и вы должны идти на компромисс. Также см. stackoverflow.com/help/how-to-ask для получения дополнительной помощи!

bembas 01.07.2018 13:24
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
333
1

Ответы 1

Мальчик, ты не должен делиться проблемами, которые живут на сайте соревнований. Эта проблема находится на сайте hackerearth.com для технического задания kelton.

Другие вопросы по теме