求助ACM!!!SDUT-1008 最大公共子串
SDUT-1008 最大公共子串的问题,用java写的代码测试没有错误,为什么提示wa
import java.util.Scanner;
public class EqualString {
//对一组测试输入pn个字符串
public String[] inputStr(Scanner pin,int pn){
String[] str=new String[pn];
for (int i = 0; i < pn; i++) {
str[i]=pin.next();
}
return str;
}
//寻找一组测试中最短的字符串
public int minStr(String[] pstr){
//k用来记录最短字符串的位序
int k=0;
String minstr=pstr[0];
for (int i = 0; i < pstr.length; i++) {
if(pstr[i].length()<minstr.length()){
minstr=pstr[i];
k=i;
}
}
return k;
}
public int equalNum(String[] pstr,int pk){
//把一组测试中所有的字符串都拆成字符数组,并把最短的字符串pminstr单独拿出来
//创建二维不规则字符数组来存储每个字符串转换成的字符,第一维的长度是该组测试数据的字符串个数,第二维的长度是该组测试中每个字符串的长度,第二维的长度是不规则的
char[][] strCh=new char[pstr.length][];
for (int i = 0; i < pstr.length; i++) {
//len用来记录一组测试中每个字符串的长度
int len=pstr[i].length();
//将每个字符串转化为一个字符数组
strCh[i]=new char[len];
strCh[i]=pstr[i].toCharArray();
}
//pk是最短的字符串,拿第k个字符串pstr[k]转换成的字符数组strCh[k]与其他字符数组作比较即可
//用num来记录在所有字符数组中都出现的相同的字符的个数
int num=0;
//三重循环:从strCh的第一个字符strCh[k][0]开始,拿strCh[k]中的每一个字符与所有字符数组比较,若所有字符数组都包含该字符,则num+1
//从strCh[k]的第i个字符开始比较
for (int i = 0; i < strCh[pk].length; i++) {
//比较该组测试的第j个字符串
int j;
for (j = 0; j < pstr.length; j++) {
//将第j个字符串转换成的字符数组的第k个字符与strCh[k]的第i个字符比较
int k = 0;
while( k < strCh[j].length&&strCh[j][k]!=strCh[pk][i])
k++;//当第j个字符串转换成的字符数组的第k个字符!=strCh[k]的第i个字符时,比较第j个字符串的下一个字符
if(k>=strCh[j].length)
break;//遍历第j个字符串转换成的字符数组,如果都不与strCh[k]的第i个字符相等,就不再遍历下一个字符串
}
if(j>=pstr.length)
num++;//如果strCh[k]的第i个字符已经与所有字符串都进行了比较,说明前面的if没有退出,即所有字符串中都包含strCh[k]的第i个字符
}
return num;
}
public static void main(String args[]){
EqualString es=new EqualString();
//设置测试数据的个数t
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int t=in.nextInt();
while(t>0){
//每组测试有n个字符串
int n=in.nextInt();
String[] str=es.inputStr(in, n);//将这n个字符串存在一个字符串数组str中
int min=es.minStr(str);//寻找这n个字符串中最短的字符串
System.out.println(es.equalNum(str, min));
t--;
}
}
}
}