Kick Start - Google: Построение палиндромов, раунд B 2019: Java Ошибка времени выполнения - PullRequest
0 голосов
/ 18 апреля 2020

Я написал свой код для следующего вопроса, он отлично работает локально , но когда я отправляю свой код на Kick Start, я получаю Ошибка времени выполнения . Я приложил вопрос и мой код. Кто-нибудь знает, почему это происходит ??

Задача У Анны есть ряд из N блоков, каждый из которых содержит ровно одну букву от А до Я. Блоки пронумерованы 1, 2, ..., N слева направо.

Сегодня она изучает палиндромы. Палиндром - это строка, написанная вперед и назад. Например, ANNA, RACECAR, AAA и X являются палиндромами, а AB, FROG и YOYO - нет.

Боб хочет проверить, насколько хорошо Анна понимает палиндромы, и задаст ей вопросы Q. Вопрос i: может ли Анна использовать все блоки, пронумерованные от Li до Ri включительно, переставляя их при необходимости, для формирования палиндрома? После каждого вопроса Анна кладет блоки обратно в исходное положение.

Пожалуйста, помогите Анне, выяснив, на сколько вопросов Боба она может ответить "да".

Ввод В первой строке входных данных указано количество тестовых случаев, за которыми следуют T. Каждый тестовый пример начинается со строки, содержащей два целых числа N и Q, количество блоков и количество вопросов соответственно. Затем следует еще одна строка, содержащая строку из N заглавных букв (от A до Z). Затем следуют Q строк. I-я строка содержит два целых числа от Li до Ri, описывающих i-й вопрос.

Выходные данные Для каждого тестового примера выведите одну строку, содержащую регистр #x: y, где x номер тестового набора (начиная с 1), а y - количество вопросов, на которые Анна может ответить «да».

Пределы Ограничение по времени: 30 секунд на тестовый набор. Ограничение памяти: 1 ГБ. 1 ≤ T ≤ 100. 1 ≤ Li ≤ Ri ≤ N.

Тестовый набор 1 (видимый) 1 ≤ N ≤ 20. 1 ≤ Q ≤ 20.

Тестовый набор 2 (скрытый) 1 ≤ N ≤ 105. 1 ≤ Q ≤ 105.

Образец

Вход

Выход

2 7 5 ABAACCA 3 6 4 4 2 5 6 7 3 7 3 5 XYZ 1 3 1 3 1 3 1 3 1 3

Дело № 1: 3 Дело № 2: 0

В примере № 1 N = 7 и Q = 5. Для первого вопроса Анна должна использовать блоки AA CC. Она может переставить эти блоки в палиндром ACCA (или CAA C). Для второго вопроса Анна должна использовать блоки А. Это уже палиндром, поэтому ей не нужно их переставлять. Для третьего вопроса Анна должна использовать блоки BAA C. Эти блоки нельзя переставить в палиндром. Для четвертого вопроса Анна должна использовать блоки CA. Эти блоки нельзя переставить в палиндром. Для пятого вопроса Анна должна использовать блоки AACCA. Она может переставить эти блоки в палиндром ACACA (или CAAA C). В общей сложности она может ответить «да» на 3 вопроса Боба, поэтому ответ - 3.

В примере № 2, N = 3 и Q = 5. Для первого вопроса Анна должна используйте блоки XYZ для создания палиндрома. Это невозможно, и, поскольку остальные вопросы Боба такие же, как и первый, ответ будет 0.

Мой код:

import java.util.*;
import java.io.*;

public class Solution {       

    int input() {
        Scanner input = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        int N = input.nextInt();
        int Q = input.nextInt();
        String word = input.next();
        String str;
        int count=0;
        if (word.length() == N) {
            for (int j = 1; j <= Q; j++) {
                int L = input.nextInt();
                int R = input.nextInt();
                str = word.substring(L-1, R);
                if (canFormPalindrome(str)){
                    count++;

                }
            }
        }

        return count;

    }
    static int NO_OF_CHARS = 256;

    static boolean canFormPalindrome(String str) {
        int count[] = new int[NO_OF_CHARS];
        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 < NO_OF_CHARS; i++) {
            if ((count[i] & 1) == 1) {
                odd++;
            }

            if (odd > 1) {
                return false;
            }
        }


        return true;

    }

    public static void main(String[] args) {
        Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        int T = in.nextInt(); //no.of test cases
        Solution obj = new Solution();
        int[] test;
        test = new int[T];

        for (int i = 1; i <= T; ++i) {
            int x=obj.input();
            test[i-1]= x;
        }

        for (int i = 1; i <= T; ++i) {
          System.out.println("Case #" + i + ": " + test[i-1]);
        }


    }
}

Ссылки: https://www.geeksforgeeks.org/check-characters-given-string-can-rearranged-form-palindrome/

...