java中字符串的回文

时间:2016-10-14 16:47:00

标签: java

问题的限制是: 第一行包含两个整数N和L. N,表示人数和L,分别是Palindrome中人物姓名的最大长度。 接下来的N行的第i个包含一个字符串S,表示第i个人的名字。  他们可以通过选择最多两个自己名称的非重叠子串并将其反转来实现。

我的代码编译正确但是给出了运行时错误:那么需要更改什么?  这是我的代码:

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);

            }
        }
    }
}

我需要打印可以将其姓名改为Palindrome表格的人数。

示例:

Input:        
   4 10            
   aacbaac
   acbdabc
   abcdcba
   abcbd

output:
   3

这里4表示总人数 10表示每个人名的最大长度

输出是3,因为只有前3个人可以将他们的名字改为各自的形式..

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

我认为这是Codechef问题。代码中的主要问题在于您将值分配给Nl的部分。请注意,您只需在line中输入一次,然后将其整数值分配给Nl。所以,问题是你的程序没有采取预期的输入:你必须在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
}

答案 2 :(得分: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一样。