这段代码(回文java)有什么错误?有人能建议如何降低其复杂性吗
下面的代码给出了codechef问题页面上给出的正确输出:但是在提交时得到错误的答案,请告诉我代码可能存在的问题 问题是这段代码(回文java)有什么错误?有人能建议如何降低其复杂性吗,java,Java,下面的代码给出了codechef问题页面上给出的正确输出:但是在提交时得到错误的答案,请告诉我代码可能存在的问题 问题是 LabdRunMe被定义为一个字符串,当它在中间分裂时, 给出具有相同字符和相同频率的两半 性格如果字符串中有奇数个字符,则 忽略中间的字符并检查是否存在lapindrome。比如gaga 是一个拉宾德罗,因为ga和ga的两半是相同的 相同频率的字符。此外,abccab、转子和xyzxy都是 拉宾德罗的几个例子。请注意,abbaab不是拉宾多罗马。这个 两半包含相同的字符,
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
这是家庭作业,所以我认为关键是你要想办法解决这个问题。这个增加一个数字的计划永远不会奏效。你必须想些别的办法