当面の問題は次のとおりです。指定された k 個の単語を含む最初の最短のサブセグメントを出力し、特殊文字、数字、および大文字と小文字を無視します。サブセグメントが見つからない場合は、「NO SUBSEGMENT FOUND」を返す必要があります</p>
サンプル入力:
This is a test. This is a programming test. This is a programming test in any language.
4
this
a
test
programming
サンプル出力:
a programming test This
8 つのテスト ケースはパスしていますが、2 つのテスト ケースはパスしていません。何が悪いのかわかりません。
また、より多くの/より良いテストケースを探しています。
私のコードはCでここにあります:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_STRING_LENGTH 200000
int main() {
char S[MAX_STRING_LENGTH]; // original string
char *smallCapsStr,*tempStr; //temp strings having only blank space and small letters
int i=0 ; // used in for loop as inc variable
int start, tail,start2=0,tail2=0; // used in storing start and end index "for answer"
int total; // total words to find in substring
char **arr; // array to store words to find
char **temparr ; // temp arr to store words
int ptr[16];
char *temp2; // temp string
int z=0; // variable informing the end of string
int val=0; //counter var
int x=0; //variable informing the start of string
smallCapsStr=(char*)malloc(sizeof(char)*200000);
char c;
//geting string and converting into small caps
do {
c=getchar();
if((c>='A' && c <='Z')||(c>='a' && c<='z')){
S[i]=(char)c;
*(smallCapsStr + i)=tolower(c);
i++;
}
else{
if(S[i-1]!=' ' && i!=0){
S[i]=' ';
*(smallCapsStr + i)=' ';
i++;
}
}
} while (c != '\n');
S[i]='\0';
*(smallCapsStr + i) ='\0';
scanf("%d",&total);
arr = (char ** )malloc(sizeof(char*)*total);
temparr = (char ** )malloc(sizeof(char*)*total);
// getting words to find in arr and temparr
for(i=0;i<total;i++){
arr[i]=(char*)malloc(sizeof(char)*14);
temparr[i]=(char*)malloc(sizeof(char)*14);
scanf("%s",ptr);
strcpy(arr[i],ptr);
strcpy(temparr[i],ptr);
}
tempStr=smallCapsStr;
while(*(tempStr+1)!='\0'){
sscanf(tempStr,"%s",ptr);
for(i=0;i<total;i++){
if(strcmp(ptr,temparr[i]) == 0){
if(x==0){
start = strlen(S)-strlen(tempStr) ;
temp2 = tempStr+strlen(ptr)+1;
}
x++;
temparr[i]="";
break;
}
}
// updating temp string
tempStr=tempStr+strlen(ptr)+1;
//if all words are found
if(x == total){
tail = strlen(S)-strlen(tempStr) -1;
x=0;
val++;
if(z == 0 || ((tail2-start2)>(tail-start)) ){
start2 = start;
tail2 = tail;
}
z++;
for(i=0;i<total;i++){
temparr[i]= arr[i];
}
tempStr=temp2;
if(val==70)
break;
}
}
// putting ans
if(start2 ==0 && tail2 ==0){
printf("NO SUBSEGMENT FOUND");
}
else{
for(i=start2 ; i<=tail2;i++){
printf("%c",S[i]);
}
}
free(temparr);
free(arr);
free(smallCapsStr);
}
これは、テストケースがユーザーに表示されない amazon.interviewstreets からの質問です。どんな種類の助けでもいいでしょう。