繁体   English   中英

java中字符串的回文

[英]palindrome of a string in java

问题的约束是:第一行包含两个整数N和LN,分别表示人的数量和L,回文中人名的最大长度。 接下来的 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);

            }
        }
    }
}

我需要打印可以将姓名更改为回文形式的人数。

例子:

Input:        
   4 10            
   aacbaac
   acbdabc
   abcdcba
   abcbd

output:
   3

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

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

您遇到的一个问题是您定义了一个字符串数组,但您试图将字符传递给它。 你应该让String reverse[] =new String[N]; 转化为Char reverse[] =new Char[N];

此外,这个reverse[i] = reverse[i] + a[i].charAt(i); 应该只是reverse[i] = a[i].charAt(i);

我认为这是一个 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
}

将其传递给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所做的那样修改它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM