Easy-6

来源:互联网 发布:wlan无法连接到网络 编辑:程序博客网 时间:2024/06/07 20:51
leetcode 500. Keyboard Row

Given a List of words, return the words that can be typed using letters of alphabet on only one row's of American keyboard like the image below.


American keyboard


Example 1:

Input: ["Hello", "Alaska", "Dad", "Peace"]Output: ["Alaska", "Dad"]

Note:

  1. You may use one character in the keyboard more than once.
  2. You may assume the input string will only contain letters of alphabet.

RE:
/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int getrow(char c,int k)
{
    char* table[3] = { "zxcvbnm","asdfghjkl","qwertyuiop" };
 int i, j;
    if(k>0)
    {
        if(strchr(table[k],c)!=NULL)
     {
         return k;
     }else
     {
         return -1;
     }
    }

 for (i = 0; i<2; i++)
 {
     if(strchr(table[i],c)!=NULL)
     {
         return i;
     }
 }
 return 2;
}


char** findWords(char** words, int wordsSize, int* returnSize) {

 char** result = (char**)malloc(wordsSize*sizeof(char*));
 int result_len = 0;
 int j = 0;
 for (int i = 0; i<wordsSize; i++)
 {
  int length = strlen(words[i]);
  int row = getrow(words[i][0] + 32,-1);
  for (j = 1; j<length; j++)
  {
   if (row != getrow(words[i][j],row))
   {
    break;
   }
  }
  if (j == length)
  {
   result[result_len] = (char *)malloc(length);
   strcpy(result[result_len], words[i]);
   returnSize[result_len] = length;
   result_len++;
  }
 }
 return result;
}

AC :(ANSWER FROM WEB)
int inRow(char *row,int length,char c){
    for (int i =0; i < length; i++) {
        int a = row[i];
        if (a == c || (a == c + 32)) {
            return 1;
        }
    }
    return 0;
}

char** findWords(char** words,int wordsSize,int* returnSize){
    char a[10] = {'q','w','e', 'r', 't', 'y','u','i', 'o', 'p'};
    char b[9] = {'a','s','d', 'f', 'g', 'h','j','k', 'l'};
    char c[7] = {'z','x','c', 'v', 'b', 'n','m'};
    char **rows = (char **)malloc(sizeof(char *)*wordsSize);
    int size = 0;
    for (int i =0; i < wordsSize; i++) {
        char *word = words[i];
        int j = 0;
        int row = 0;
        int inOneRow = 1;
        while (word[j] != '\0') {
            if (row == 0) {
                if (inRow(a, 10, word[j])) {
                    row = 1;
                    continue;
                }
                if (inRow(b, 9, word[j])) {
                    row = 2;
                    continue;
                }
                if (inRow(c, 7, word[j])) {
                    row = 3;
                    continue;
                }
            } else {
                if ((inRow(a, 10, word[j]) && row != 1) || (inRow(b, 9, word[j]) && row != 2) || (inRow(c, 7, word[j]) && row != 3)) {
                    inOneRow = 0;
                    break;
                }
            }
            j++;
        }
        if (inOneRow) {
            rows[size] = word;
            size++;
        }
    }
    *returnSize = size;
    return rows;
}
0 0
原创粉丝点击