| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
总是WA,真郁闷,高手麻烦指点一下:我的思想就是当输入一个新的字符串以后就和前面输入所有的进行比较,返回一个compare的值,每次比较如果发现长度比原来prefix的长度长就更新这个字符串,最后比较下来最大的那个数值就是这个prefix的长度。
运行测试的数据没问题,也考虑了单词相同的情况。
#include <iostream>
#include <fstream>
using namespace std;
char word[1000][100];
char prefix[100][100];
int strnum;
int compare(int ii,int jj){ //ii就是当前的那个单词,jj就是原来插入的那个单词。
int llen=strlen(word[ii]);
int rlen=strlen(word[jj]);
int pos=0;
for(int i=0;i<llen&&i<rlen;i++){
if(word[ii][i]==word[jj][i])continue;
else{
pos=i;
break;
}
}
if(i==rlen){
strcpy(prefix[jj],word[jj]);
return i;
}else if(i==llen){
if(llen+1>rlen){
for(int tmp=0;tmp<=i;tmp++){
prefix[jj][tmp]=word[jj][tmp];
}
prefix[jj][tmp]='\0';
}
return i;
}else if(pos+1>strlen(prefix[jj])){
for(int i=0;i<=pos;i++){
prefix[jj][i]=word[jj][i];
}
prefix[jj][i]='\0';
}
return pos;
}
void insert(const char *c){
strcpy(word[strnum],c);
if(strnum==0){
prefix[strnum][0]=word[strnum][0];
prefix[strnum][1]='\0';
strnum++;
return;
}
int max=0;
for(int i=0;i<strnum;i++){
int pos=compare(strnum,i);
if(pos>max)max=pos;
}
for(i=0;i<=max;i++){
prefix[strnum][i]=word[strnum][i];
}
prefix[strnum][i]='\0';
strnum++;
}
void print(){
for(int i=0;i<strnum;i++){
cout<<word[i]<<" "<<prefix[i]<<endl;
}
cout<<endl;
}
void main(){
// ifstream cin("data.txt");
char tmp[100];
strnum=0;
while(cin>>tmp){
insert(tmp);
}
print();
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator