我写了以下代码,输出也按要求提供。但是,当我在网站上提交我的代码时,它总是最终表明答案是错误的。 任何人都可以找到任何可能导致错误的错误(我看不到任何错误)。
任务是将给定的字符串转换为回文结构(IF POSSIBLE)。输入格式为
a.bc
.aacc
以上的输出为-1,两次因为无法将.
这是我的代码:
import java.util.*;
class m
{
static int p,o,k,m;
public static void main(String args[])
{
String a[] = new String[500];
int e[] = new int[500];
int i,j;
m o = new m();
Scanner s = new Scanner(System.in);
int n = s.nextInt();
for(i=0;i!=n;i++)
{
a[i] = s.next();
}
//FOR CHECKING NUMBER OF PAIRS
for(i = 0 ; i < n ; i++)
{
p=0;
for(j = 0 ; j < a[i].length() ; j++)
{
if(a[i].charAt(j) == a[i].charAt(a[i].length() - 1 - j))
{
++p;
}
}
e[i] = p;
}
//IF STRING LENGTH IS EVEN
for(i = 0 ; i < n ; i++)
{
for(j = 0 ; j < a[i].length() ; j++)
{
if(a[i].length()%2 == 0)
{
if(e[i] == (a[i].length() - 2))
{
String h = a[i].replace('.',a[i].charAt(a[i].length() - 1 - a[i].indexOf('.')));
System.out.println(h);
break;
}
else
{
System.out.println("-1");
break;
}
}
//IF STRING LENGTH IS ODD
else
{
if(a[i].indexOf('.') == (((a[i].length() + 1 ) / 2 ) - 1))
{
if(e[i] == (a[i].length() ))
{
String g = a[i].replace('.','a');
System.out.println(g);
break;
}
else
{
System.out.println("-1");
break;
}
}
else if(e[i] == (a[i].length() - 2))
{
String q = a[i].replace('.',a[i].charAt(a[i].length() - a[i].indexOf('.') - 1));
System.out.println(q);
break;
}
else
{
System.out.println("-1");
break;
}
}
}
}
更新后的那个:
import java.util.*;
import java.lang.*;
class m
{
public static void main(String args[])
{
int i,j;
Scanner r = new Scanner(System.in);
char b[][] = new char [50][50];
String a[] = new String [12345];
int n = r.nextInt();
for( i = 0 ; i < n ; i++)
{
a[i] = r.next();
if(a[i] == " ")
a[i] = null;
}
//FOR INITIALISING THE ARRAY
for(i = 0 ; i < n ; i++)
{
for( j = 0 ; j < a[i].length() ; j++)
{
b[i][j] = a[i].charAt(j);
}
}
int ll;
int pp = 0;
for(i=0;i<n;i++)
{
int lena = a[i].length();
pp = lena;
ll = 0;
for(j=0;j<(lena/2);j++)
{
if(b[i][j] == b[i][lena-1-j])
++ll;
//System.out.println("ITS WORKING" +pp);
}
if(ll == pp/2)
{
System.out.println("-1");
// System.exit(0);
break;
}
}
// System.out.println("ITS WORKING" +count);
//FOR PRINTING THE array
/* for(i = 0 ; i < n ; i++)
{
for(j= 0 ; b[i][j]!='\0' ; j++)
{
System.out.println(b[i][j]);
}
}*/
for(i = 0 ; i < n ; i++)
{
int len = a[i].length();
for( j = 0 ; j < len/2 ; j++)
{
if(len%2 == 0)
{
if(b[i][j] == '.' && b[i][len-1-j] == '.')
b[i][j] = b[i][len-1-j] = 'a';
else if(b[i][j] == '.' && b[i][len-1-j]!='.' )
b[i][j] = b[i][len-1-j];
else if (b[i][j]!= '.' && b[i][len-1-j] == '.')
b[i][len-1-j] = b[i][j];
else{
if(b[i][j] == b[i][len-1-j])
continue;
else
{
System.out.println("-1");
//System.exit(0);
// hh = false;
break;
}
}
}
else if(len%2!=0)
{
if(b[i][(len-1)/2] == '.')
b[i][(len-1)/2] = 'a';
else
{
if(b[i][j] == '.' && b[i][len-1-j] == '.')
{
b[i][j] = b[i][len-1-j] = 'a';
//System.out.println("ITS WORKING");
}
else if(b[i][j] == '.' && b[i][len-1-j]!='.' )
b[i][j] = b[i][len-1-j];
else if (b[i][j]!= '.' && b[i][len-1-j] == '.')
b[i][len-1-j] = b[i][j];
else{
if(b[i][j] == b[i][len-1-j])
continue;
else
{
System.out.println("-1");
//System.exit(0);
// hh = false;
break;
}
}
}
}
}
}
for(i = 0 ; i < n ; i++)
{
for(j= 0 ; b[i][j]!='\0' ; j++)
{
System.out.print(b[i][j]);
}
System.out.println();
}
}
}
答案 0 :(得分:1)
当我运行你的代码时,它似乎在包含正好1个点的输入上按预期工作。没有点(例如,abba
)或多个点(ab..
),它似乎始终打印-1。我不知道这是否符合预期(正如您的网站所期望的那样!)。这是我对可能出错的最佳猜测。
要处理多个点,如果是我,我会:
a[i].length() - 1 - j
)。如果两者都是点,请填写&#39; a&#39;在这两个地方;如果一个是圆点,则从相反位置复制该字母;如果没有一个点,它们必须是相同的,或者你可以打印-1并打破循环(或者更好的是,设置一个布尔变量来指示无法构建回文)。如果您需要进一步的帮助。我相信我们需要一个更准确的问题陈述,更精确的程序要求。