2016-10-14 3 views
-2

Сложность вопроса такова: Первая строка содержит два целых числа N и L N, обозначая количество человек и L, максимальную длину имени человека в Palindrome соответственно. i-я из следующих N строк содержит одну строку S, обозначающую имя i-го человека. Они могут сделать это, выбирая не более двух неперекрывающихся подстрок с собственным именем и обращая их.палиндром строки в java

Мой код скомпилирован правильно, но дает ошибку времени выполнения: Итак, что нужно изменить? вот мой код:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.Arrays; 

class Palindrome { 

    public static void main(String args[]) throws Exception { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     { 
      String line = br.readLine(); 
      int N = Integer.parseInt(line); 
      int l = Integer.parseInt(line); 
      String a[] = new String[N]; 
      int c = 0; 

      for (int i = 0; i < N; i++) { 
       System.out.println("Enter names"); 
       a[i] = br.readLine(); 
      } 
      String reverse[] = new String[N]; 

      int arrayLength = a.length; 

      for (int i = arrayLength - 1; i >= 0; i--) { 
       reverse[i] = reverse[i] + a[i].charAt(i); 
      } 
      if (Arrays.equals(a, reverse)) //if (a[i].equals(reverse[i])) 
      { 
       c++; 

       System.out.println(c); 

      } 
     } 
    } 
} 

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

Пример:

Input:   
    4 10    
    aacbaac 
    acbdabc 
    abcdcba 
    abcbd 

и

output: 
    3 

здесь 4 обозначает общее число человека 10 обозначает максимальную длину каждого имени человека

выход 3, как только первые 3 человек могут изменить свое название на соответствующую форму.

+1

Какая ошибка вы получаете? – BlackHatSamurai

+0

Что у вас 3 входа? – progyammer

ответ

0

Одна из проблем заключается в том, что вы определили строковый массив, но вы пытаетесь передать в него символы. Вы должны сделать String reverse[] =new String[N]; в Char reverse[] =new Char[N];

Кроме того, это reverse[i] = reverse[i] + a[i].charAt(i); должно быть просто reverse[i] = a[i].charAt(i);

+0

'reverse [i] = a [i] .charAt (i);' должно быть 'reverse [i] = String.valueOf (a [i] .charAt (i)); else ошибка. –

0

Я полагаю, это проблема Codechef. Основная проблема в вашем коде находится в той части, где вы присваиваете значения N и l. Обратите внимание, что вы берете ввод в line только один раз, а затем присваиваете его целочисленное значение как N, так и l. Таким образом, проблема в том, что ваша программа не принимает ожидаемый ввод: вы должны принять ввод в lineдважды. Изменить эту часть

String line = br.readLine(); 
int N = Integer.parseInt(line); 
line = br.readLine(); //add this line before assigning l's value 
int l= Integer.parseInt(line); 

Кроме того, что вы пытаетесь сделать в цикле, находя реверс строки должно быть сделано в гнездовой конструкции цикла. Чтобы отказаться от этого осложнения, забудьте второй массив reverse; Вы можете использовать это заявление одной строки для проверки строки палиндромности:

for(int i=0; i<a.length; i++){ 
    if(String.valueOf(new StringBuffer(a[i]).reverse()).equalsIgnoreCase(a[i])) 
     //a[i] is a palindrome, do whatever you want to 
} 
0

передать его StringBuilder заказовМои повернуть его вспять. Просмотрите код ниже:

public static void main(String args[]) throws Exception { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

     String line = br.readLine(); 
     int N = Integer.parseInt(line); 
     int l = Integer.parseInt(line); 
     String a[] = new String[N]; 
     int c = 0; 

     for (int i = 0; i < N; i++) { 
      System.out.println("Enter names"); 
      a[i] = br.readLine(); 
     } 
     String reverse[] = new String[N]; 

     int arrayLength = a.length; 

     for (int i = arrayLength - 1; i >= 0; i--) { 

      StringBuilder build = new StringBuilder(a[i]); 

      reverse[i] = build.reverse().toString(); 
      if (a[i].equals(reverse[i])) { 
       c++; 
      } 

     } 
     System.out.println("Pal is " + c); 

    } 

Я не знаю, что вы используете int переменную l для, но изменить его, как я сделал выше, с N.

Смежные вопросы