Java 寻找字典最小回文

Java 寻找字典最小回文,java,palindrome,Java,Palindrome,我编写了下面的代码,输出也按要求提供。然而,当我在网站上提交代码时,它总是显示答案是错误的。 有没有人能找到任何可能导致这些错误的错误(我看不到) 任务是将给定字符串转换为回文(如果可能)。输入格式为 a.bc .aacc 上面的输出为-1,是字符串无法转换为回文的两倍,无论您在 这是我的密码: import java.util.*; class m { static int p,o,k,m; public static void main(String args[]) {

我编写了下面的代码,输出也按要求提供。然而,当我在网站上提交代码时,它总是显示答案是错误的。 有没有人能找到任何可能导致这些错误的错误(我看不到)

任务是将给定字符串转换为回文(如果可能)。输入格式为

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.*;
m类
{
静态整数p,o,k,m;
公共静态void main(字符串参数[])
{
字符串a[]=新字符串[500];
整数e[]=新整数[500];
int i,j;
m o=新的m();
扫描仪s=新的扫描仪(System.in);
int n=s.nextInt();
对于(i=0;i!=n;i++)
{
a[i]=s.next();
}
//用于检查对数
对于(i=0;i
最新版本:

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

}
}
import java.util.*;
导入java.lang.*;
m类
{
公共静态void main(字符串参数[])
{
int i,j;
扫描仪r=新的扫描仪(System.in);
字符b[][]=新字符[50][50];
字符串a[]=新字符串[12345];
int n=r.nextInt();
对于(i=0;i对于(i=0;i当我运行您的代码时,它似乎在正好包含1个点的输入上按预期工作。没有点(例如,
abba
)或多个点(
ab..
),它似乎总是打印-1。我无法判断这是否如预期的那样(如您的网站所期望的那样!)。这是我对可能出现错误的最佳猜测

要处理多个点,如果是我,我会:

  • 将字符串转换为可以修改的内容,如StringBuffer、StringBuilder或char数组
  • 仅循环单词的前半部分,始终查看当前字符和从另一端开始计数的相同位置的字符(您已经有了公式:
    a[i].length()-1-j
    )。如果两个都是点,请在两处填写“a”;如果一个是点,请从相反的位置复制字母;如果没有点,则它们必须相同,或者可以打印-1并跳出循环(或者更好,设置一个布尔变量以指示构造回文失败)
  • 如果中间位置有一个点(只能用奇数长度),用“A”替换它。< /LI>
  • 如果到目前为止成功,请打印修改后的单词。除了无点的情况:如果单词仍然与输入相同,也可以打印-1

  • 如果您需要进一步的帮助。我相信我们需要一个更精确的问题陈述,对您的程序提出更精确的要求。

    提供:1.问题陈述。2.失败的测试用例。3.该测试用例的预期输出。好的,输入应该是一个带“.”的字符串。任务是检索最小的按字典顺序排列的佩林失败的测试用例应该有一个输出“-1”.让我们只说a.c,它永远不会是回文。不可能说代码是对的还是错的,因为问题文本中没有详细描述程序应该做什么。因此,正如您明显看到的,您的问题陈述表述非常糟糕。因此,让我引用关闭您的qu的原因描述estion:寻求调试帮助的问题(“为什么这段代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。当我运行您的代码时,它似乎在正好包含1个点的输入上按预期工作。没有点(例如,
    abba
    )或者多个点(
    ab..
    )它似乎总是打印-1。我无法判断这是否如预期的那样(正如您的网站所期望的那样!)。无点大小写应该有输出-1(这是正确的,这意味着给定的字符串不能再转换为回文)。错误在于它没有检查超过1个点的大小写。非常感谢您的关注。感谢您提出我如何处理多个点的大小写的想法,因为我发现它太复杂,无法编码。请参阅编辑;我已经填写了类似伪算法的内容。步骤3b似乎错误。是否存在不匹配