这段代码(回文java)有什么错误?有人能建议如何降低其复杂性吗

这段代码(回文java)有什么错误?有人能建议如何降低其复杂性吗,java,Java,下面的代码给出了codechef问题页面上给出的正确输出:但是在提交时得到错误的答案,请告诉我代码可能存在的问题 问题是 LabdRunMe被定义为一个字符串,当它在中间分裂时, 给出具有相同字符和相同频率的两半 性格如果字符串中有奇数个字符,则 忽略中间的字符并检查是否存在lapindrome。比如gaga 是一个拉宾德罗,因为ga和ga的两半是相同的 相同频率的字符。此外,abccab、转子和xyzxy都是 拉宾德罗的几个例子。请注意,abbaab不是拉宾多罗马。这个 两半包含相同的字符,

下面的代码给出了codechef问题页面上给出的正确输出:但是在提交时得到错误的答案,请告诉我代码可能存在的问题

问题是

LabdRunMe被定义为一个字符串,当它在中间分裂时, 给出具有相同字符和相同频率的两半 性格如果字符串中有奇数个字符,则 忽略中间的字符并检查是否存在lapindrome。比如gaga 是一个拉宾德罗,因为ga和ga的两半是相同的 相同频率的字符。此外,abccab、转子和xyzxy都是 拉宾德罗的几个例子。请注意,abbaab不是拉宾多罗马。这个 两半包含相同的字符,但其频率不相同 火柴你的任务很简单。给定一个字符串,您需要判断它是否为 拉宾多罗马

输入:

输入的第一行包含一个整数T,即测试用例数

每个测试都是一行,包含一个仅由小写英文字母组成的字符串S

输出:

对于每个测试用例,在单独的一行上输出:如果字符串是lapindrome,则为“YES”;如果字符串不是lapindrome,则为“NO”

这是代码

public class Lapindrome {

    public static void main(String[] args) {        
        Scanner sc= new Scanner(System.in);
        int t=sc.nextInt();

        for(int i=0;i<=t;i++)
        {
            String word= sc.nextLine();
            int wl= word.length();

            char[] carr= word.toCharArray();

            int fh=0;
            int lh=0;

            for(int st=0, end=wl-1 ; st<wl/2 && end>= wl/2; st++, end--) 
            {       
                fh+=carr[st];
                lh+=carr[end];  
            }

            if(fh!=0) 
            {
                if(fh==lh)System.out.println("YES");
                else System.out.println("NO");
            }
        }
        sc.close();
    }

}
public class-Lapindrome{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int t=sc.nextInt();
对于(int i=0;i
  • 为了降低复杂性,这就像吃大象一样。你是如何做到的?--一步一步地。生成方法。有一个方法,将字符串作为param,并返回它是否为lapindrome。现在,你已经将读取字符串的逻辑从system in中分离出来,并确定事情是否为lapindrome。这使你的代码更加灵活,并降低复杂性;然后可以查看方法“public boolean isLapindrome(字符串字)”它本身不需要读取扫描位,以及“如果是,则打印是”的规则,这与确定某事物是否为lapindrome无关。换句话说,拥有与读取输入和写入输出相关的代码,并拥有另一段与确定某事物是否为lapindrome相关的代码他们是拉宾德罗。两人应该坚持各自的责任

  • 问题是您的代码采用了不应该采用的快捷方式。
    carr[st]
    在单词的“st”位置包含字母的ASCII码。然后您只需添加这些。这会导致两个问题:

  • 对于足够长的单词,int不能满足您的需要。int不能大于2^31-1(约20亿)。我怀疑这是原因(您需要相当长的字符串才能查看),但这是代码的问题
  • a的ascii码加上d的ascii码等于b的ascii码加上c的ascii码。两者都等于197。所以,你的程序说“adcb”是一个lapindrome
  • 这是家庭作业,所以我认为关键是你要想办法解决这个问题。这个增加一个数字的计划永远不会奏效。你必须想些别的办法