#include <stdio.h> #include <string.h>

#define MAX_WORD_LEN 20 #define MAX_WORD_NUM 1000

typedef struct { char word[MAX_WORD_LEN + 1]; int count; } Word;

Word words[MAX_WORD_NUM]; int wordNum;

char prefix[MAX_WORD_LEN + 1];

int findPrefix(char *word) { int len = strlen(word); int i; for (i = 1; i <= len; i++) { strncpy(prefix, word, i); prefix[i] = '\0'; int j, count = 0; for (j = 0; j < wordNum; j++) { if (strncmp(prefix, words[j].word, i) == 0) { count++; } } if (count == 1) { return i; } } return 0; }

int main() { char word[MAX_WORD_LEN + 1]; while (scanf('%s', word) != EOF) { strcpy(words[wordNum].word, word); words[wordNum].count = 0; wordNum++; }

int i;
for (i = 0; i < wordNum; i++) {
    int prefixLen = findPrefix(words[i].word);
    if (prefixLen == 0) {
        prefixLen = 1;
    }
    strncpy(prefix, words[i].word, prefixLen);
    prefix[prefixLen] = '\0';
    printf('%s %s\n', words[i].word, prefix);
}

return 0;

}

C 语言代码:找到最短的唯一前缀

原文地址: https://www.cveoy.top/t/topic/n7AJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录