/*
* 算法思想:
* 建立单词表,忽略大小写。
*/
int get_aB_index(char c) {
if(c>='a' && c<='z') return c-'a';
if(c>='A' && c<='Z') return c-'A';
return -1;
}
char * shortestCompletingWord(char * s, char ** words, int wordsSize){
int i, j, cnt[26], tmp, char_num=0, min = INT_MAX, len, char_left, tmp_cnt[26];
char *ret;
memset(cnt, 0, sizeof(cnt));
i = 0;
while(s[i]) {
tmp = get_aB_index(s[i]);
if(tmp >= 0){
// printf("char=%c\n", s[i]);
cnt[tmp]++;
char_num++;
}
i++;
}
//printf("char_num = %d\n", char_num);
for(i=0; i<wordsSize; i++){
j = 0;
char_left = char_num;
memcpy(tmp_cnt, cnt, 26*sizeof(int));
while(words[i][j] && char_left) {
tmp = get_aB_index(words[i][j]);
if(tmp_cnt[tmp]) {
char_left--;
tmp_cnt[tmp]--;
}
j++;
}
if(char_left <= 0 && strlen(words[i]) < min) {
min = strlen(words[i]);
ret = words[i];
//printf("min s = %s \n", words[i]);
}
}
return ret;
}
leetcode-748. 最短完整词-C语言
最新推荐文章于 2022-04-07 21:21:51 发布