2 tiger1334 tiger1334 于 2016.01.29 17:50 提问

我的hihocoder这个最长回文子串为什么报wrong answer?

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for(int i = 0;i String str = scanner.next();
System.out.println(findMax(buildStr(str))/2);
}
}
public static int findMax(String str){
int pArr[] = new int[str.length()];
int pr = 0;
int index = 0;
for(int i = 0;i if(i==0){
pArr[i] = expand(i,str);
pr=pArr[i]+index;
}else{
if(i if(2*index-i-pArr[2*index-i]>index-pArr[index]){
pArr[i] = 2*index-i-(index-pArr[index]);
index = i;
pr = index+pArr[i];
}else if(2*index-i-pArr[2*index-i]<index-pArr[index]){
pArr[i] = pArr[2*index-i];
}else{
pArr[i] = expandFromPr(i,pr,str);
index = i;
pr = index+pArr[i];
}
}else{
pArr[i] = expand(i,str);
index = i;
pr = index+pArr[i];
}
}
}
int max = 0;
for(int k:pArr){
max = Math.max(k*2-1, max);
}
return max;
}

public static int expandFromPr(int i,int pr,String str){
int count = pr-i;
int j = pr-i;
while(i-j>=0&&i+j<str.length()&&str.charAt(i-j)==str.charAt(i+j)){
j++;
count++;
}
return count;
}

public static int expand(int i,String str){
int count = 1;
int j = 1;
while(i-j>=0&&i+j<str.length()&&str.charAt(i-j)==str.charAt(i+j)){
j++;
count++;
}
return count;
}
public static String buildStr(String str){
StringBuilder strb = new StringBuilder();
int index = 0;
int length = str.length();
length=length*2+1;
for(int i = 0;i<length;i++){
if(i%2==0)
strb.append('#');
else
strb.append(str.charAt(index++));
}
return strb.toString();
}
}

2个回答

devmiao
devmiao   Ds   Rxr 2016.01.29 22:31

你多用几个测试用例测试下,肯定有错的。

tiger1334
tiger1334   2016.01.29 23:36

问题是我已经试过了很多用例了,应该怎么想测试用例呢?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
hihoCoder#1032_最长回文子串
求最长回文子串的算法比较经典的是manacher算法,下面写写自己的理解。 (文中用到的图片来自这里,博主写的很好,由于为了图片和代码一致,我稍微p了一下图片。) 首先,说明一下用到的数组和其他参数的含义: (1):       以字符串中下标为的字符为中心的回文子串半径长度; 例如:字符串,那么,    (以b为中心的回文子串是,半径长度为2。计算半径时包括b本身)
acm题为什么总是出现wrong answer。。。求大神救助
#include int main() {  char c[100];  char* p, *pm, *head;  int sh;    p = c;  pm = c;  head = c;    while(gets(c))  {   pm =c;   if(*p   {    sh = 1;   }   else   {    sh = 0;  
为什么这题交上去显示wrong answer?
#include #include int main() {     unsigned int n,i,c; int j; while(scanf("%d",&n)&&n!=0) { j=sqrt(n); if(n!=1) { for(i=2;i { c=n%i; if(c==0)break; } if(c==0) printf("NO\n"); else p
一道题Wrong Answer之后该何去何从?
敲代码手不稳是个大毛病,往往会让一份能AC的代码变成99.995%正确,失之毫厘谬以千里,最近十场个人赛很少有能一次AC的经历,仔细想想触发根本逻辑上的错误,大概都是跪在这些细节上: 1.输出格式,输入格式是否符合规范,有没有Case #?是否有多余空格输出?I64d or lld?输出浮点数尽量不要用cout。 2.i和j,n和m,l和r有没有写混了的。。(今晚检查了两小时的程序发现i
poj1001在测试他给的数据结果一模一样,但总是wrong answer
poj1001在测试他给的数据结果一模一样,但总是wrong answer,怎么破
hihocoder 1032 最长回文子串(Manachar算法)
#1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述    小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。    这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符
ACM 中wrong answer(WA)的一种处理办法 UVA10474 where is the marble
ACM 中wrong answer(WA)的一种处理办法 UVA10474 where is the marble
杭电OJ--Wrong Answer报错
这里有个大家会习惯性犯错的地方,就是省略了return 0;查看下,是否是这个低级错误,如果没有那就是代码问题了。
wrong answer 原因
1.浮点型数据用double型,防止超出;2,double型输入输出用%lf;
北大ACM1006报WrongAnswer解决思路
在1002题之后,后面的1003到1005实在太过简单,所以就不单独发博文阐述了,有问题可以在评论下面回复。 我们详细讨论一下1006题,题目的大致意思大概是找一个公倍数的问题,也就是这三个数在什么时候有一个可以被整除的时间。除了p,e,i这三个参数,为了迷惑你题目还特地弄了一个起始时间,也就是d,事实上这个并没有什么卵用,唯一的作用只是让你在最后减去d,仅此而已。因此题目的关键就是找到这个日期