[英]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 問題。 代碼中的主要問題在於您將值分配給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
}
將其傳遞給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.