最后三个TLE了,麻烦大佬们帮忙看看有啥问题,不胜感激
查看原帖
最后三个TLE了,麻烦大佬们帮忙看看有啥问题,不胜感激
767113
Tsuburaya_wondon楼主2022/12/5 16:28
#include <stdio.h>
 #include <string.h>
 #define WLEN 15
 #define SLEN 1000005
 int num;
 char word[WLEN] = {'\0'}, sentence[SLEN] = {'\0'}, sentence_a[SLEN] = {'\0'};

int nstrstr(const char* str, const char* sub){
    int cnt = 0;
 	const char* start = str;
 	while (*start != '\0'){
         if (*start == ' '){
 		    const char* str_p = start + 1;
 		    const char* sub_p = sub;
 		    while (*str_p == *sub_p && *str_p != '\0' && *sub_p != '\0'){
 				str_p++;
 				sub_p++;
 		    }
            start = str_p;//更新start指向
            if ((*start == ' ' || *start == '\0') && *sub_p == '\0') {
                cnt++;
                if (cnt == 1) num = (int)(start - str) - strlen(sub) - 1;
            }
        }
        if (*start != '\0' && *start != ' ') start++;
    }
 	return cnt;
 }

void strlwr(char str[]){
    int i;
    for(i = 0; i < strlen(str); i++){
        if (str[i] >= 'A' && str[i] <= 'Z') str[i] += ('a' - 'A');
    }
}

int main(){
    char x;
    sentence_a[0] = ' ';
    scanf("%[^\n]", word);
    x = getchar();
    scanf("%[^\n]", sentence);
    strlwr(word);
    strlwr(sentence);
    strcat(sentence_a, sentence);
    if (!nstrstr(sentence_a, word)) printf("-1\n");
    else printf("%d %d\n", nstrstr(sentence_a, word), num);
    return 0;
}
2022/12/5 16:28
加载中...