水题,hash表。
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
char** findWords(char** words, int wordsSize, int* returnSize) {
*returnSize = 0;
int T[] = {1, 2, 2, 1, 0, 1, 1, 1, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 0, 0, 2, 0, 2, 0, 2}; // 0,1,2分别代表上,中,下三行
char** retArray = (char**)malloc(wordsSize * sizeof(char*)); // 返回的二维数组
int i, j, ok, x, wordLen;
for (i = 0; i < wordsSize; i++) {
ok = 1;
x = T[tolower(words[i][0])-'a']; // 获取words[i]的第一个字母所在的行号
wordLen = strlen(words[i]);
for (j = 1; j < wordLen; j++) {
if (T[tolower(words[i][j])-'a'] != x) { // 比较words[i]其他字母的行号
ok = 0;
break;
}
}
if (ok) { // 如果所有字母都在同一行,就加入到答案中去
char* buf = (char*)malloc(sizeof(char) * (wordLen + 1));
strcpy(buf, words[i]);
retArray[*returnSize] = buf;
(*returnSize)++;
}
}
return retArray;
}