SHOW:
|
|
- or go back to the newest paste.
| 1 | - | #include <iostream> |
| 1 | + | class Solution {
|
| 2 | - | #include<string> |
| 2 | + | |
| 3 | - | #include<vector> |
| 3 | + | class KeyboardRow {
|
| 4 | - | #include<algorithm> |
| 4 | + | public: |
| 5 | - | |
| 5 | + | bool exists_in_single_row(std::string str){
|
| 6 | - | |
| 6 | + | std::transform(str.begin(), str.end(), str.begin(), [](char s){ return std::toupper(s); });
|
| 7 | - | class solution{
|
| 7 | + | bool r1 = std::all_of(str.begin(), str.end(), [this](char c){ return in_row1(c); });
|
| 8 | - | |
| 8 | + | bool r2 = std::all_of(str.begin(), str.end(), [this](char c){ return in_row2(c); });
|
| 9 | - | |
| 9 | + | bool r3 = std::all_of(str.begin(), str.end(), [this](char c){ return in_row3(c); });
|
| 10 | return r1 || r2 || r3; | |
| 11 | - | |
| 11 | + | |
| 12 | - | std::vector<std::string>findWords(std::vector<std::string>& words) |
| 12 | + | |
| 13 | - | {
|
| 13 | + | private: |
| 14 | - | |
| 14 | + | |
| 15 | - | char row1[] ={'q','w','e','r','t','y','u','i','o','p','Q','W','E','R','T','Y','U','I','O','P'};
|
| 15 | + | bool in_row1(char c) |
| 16 | - | |
| 16 | + | { return std::find(std::begin(row1), std::end(row1), c) != std::end(row1); }
|
| 17 | - | char row2[] ={'a','s','d','f','g','h','j','k','l','A','S','D','F','G','H','J','K','L'};
|
| 17 | + | |
| 18 | - | |
| 18 | + | bool in_row2(char c) |
| 19 | - | char row3[]={'z','x','c','v','b','n','m','Z','X','C','V','B','N','M'};
|
| 19 | + | { return std::find(std::begin(row2), std::end(row2), c) != std::end(row2); }
|
| 20 | - | |
| 20 | + | |
| 21 | - | bool result[words.size()+1]; |
| 21 | + | bool in_row3(char c) |
| 22 | - | |
| 22 | + | { return std::find(std::begin(row3), std::end(row3), c) != std::end(row3); }
|
| 23 | - | |
| 23 | + | |
| 24 | - | |
| 24 | + | private: |
| 25 | - | // iterate through the words |
| 25 | + | const char row1[10] = {'Q','W','E','R','T','Y','U','I','O','P'};
|
| 26 | - | |
| 26 | + | const char row2[9] = {'A','S','D','F','G','H','J','K','L'};
|
| 27 | - | for(size_t i =0; i<words.size(); i++) |
| 27 | + | const char row3[7] = {'Z','X','C','V','B','N','M'};
|
| 28 | - | {
|
| 28 | + | }; |
| 29 | - | result[i] = true; |
| 29 | + | |
| 30 | - | |
| 30 | + | |
| 31 | - | char *found; |
| 31 | + | vector<string> findWords(vector<string>& words) {
|
| 32 | - | |
| 32 | + | KeyboardRow kr; |
| 33 | - | |
| 33 | + | std::vector<std::string> result; |
| 34 | - | |
| 34 | + | |
| 35 | - | // search through row1 |
| 35 | + | std::copy_if(words.begin(), words.end(), std::back_inserter(result), |
| 36 | - | |
| 36 | + | [&kr](const std::string& s){ return kr.exists_in_single_row(s); });
|
| 37 | - | found = std::find(row1, row1+20, words[i][0]); //if first letter is found in row 1 |
| 37 | + | return result; |
| 38 | - | |
| 38 | + | } |
| 39 | - | if(found != row1+20) |
| 39 | + | }; |