首页 > 学院 > 开发设计 > 正文

500. Keyboard Row - 是否为键盘行序列

2019-11-10 21:35:44
字体:
来源:转载
供稿:网友

hhttps://leetcode.com/PRoblems/keyboard-row/

分析

判断所给的各个序列是否是有键盘中的一行字母能够组成的,写的比较简单,也没用什么算法,简单的字符串匹配加判断,没有拆分封装函数,写的比较啰嗦,还用了goto,有下面几点需要关注:

goto语句后面不能直接结束,至少还需要有一条语句,否则会报错动态二维数组内存申请,先申请行指针,再申请列内存

实现

/** * 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) { int *pYesWordNum; int yesWordCount = 0; int i = 0; int j = 0; int k = 0; int line1Flag = 0; int line2Flag = 0; int line3Flag = 0; int wordLen = 0; int maxWordLen = 0; int retWordNum = 0; char line1[20] = {'q','w','e','r','t','y','u','i','o','p','Q','W','E','R','T','Y','U','I','O','P'}; char line2[18] = {'a','s','d','f','g','h','j','k','l','A','S','D','F','G','H','J','K','L'}; char line3[14] = {'z','x','c','v','b','n','m','Z','X','C','V','B','N','M'}; char **pRetWords; int pp; pYesWordNum = (int *)malloc(wordsSize * sizeof(int)); memset(pYesWordNum, 0, wordsSize * sizeof(int)); for (i = 0; i < wordsSize; i++) { wordLen = (int)strlen(words[i]); if (wordLen > maxWordLen) { maxWordLen = wordLen; } line1Flag = 0; line2Flag = 0; line3Flag = 0; for (j = 0; j < wordLen; j++) { for (k = 0; k < 20; k++) { if (words[i][j] == line1[k]) { if ((line2Flag == 1) || (line3Flag == 1)) { goto nextWord; } line1Flag = 1; goto nextAlphabet; } } for (k = 0; k < 18; k++) { if (words[i][j] == line2[k]) { if ((line1Flag == 1) || (line3Flag == 1)) { goto nextWord; } line2Flag = 1; goto nextAlphabet; } } for (k = 0; k < 14; k++) { if (words[i][j] == line3[k]) { if ((line1Flag == 1) || (line2Flag == 1)) { goto nextWord; } line3Flag = 1; goto nextAlphabet; } } /* 该单词已检查,跳转下一个字母 */ nextAlphabet: pp =1; } /* 该单词符合,进行记录 */ pYesWordNum[i] = 1; /* 该单词不符合,跳转下一个单词 */ nextWord: pp =1; } /* 统计符合单词的数目 */ for (i = 0; i < wordsSize; i++) { if (pYesWordNum[i] == 1) { yesWordCount++; } } pRetWords = (char **)malloc(yesWordCount * sizeof(char *)); for (i = 0; i < yesWordCount; i++) { pRetWords[i]=(char *)malloc(maxWordLen); } for (i = 0; i < yesWordCount; i++) { memset(pRetWords[i], 0, maxWordLen); } for (i = 0; i < wordsSize; i++) { if (pYesWordNum[i] == 1) { strcpy(pRetWords[retWordNum], words[i]); retWordNum++; } } free(pYesWordNum); *returnSize = retWordNum; return pRetWords;}
上一篇:字符串转换

下一篇:poj1450

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表