1 #define _for(i,a,b) for(int i = (a);i < (b);i ++) 2 class Solution 3 { 4 public: 5 vector<string> spellchecker(vector<string>& wordlist, vector<string>& queries) 6 { 7 vector<string> rnt; 8 set<string> ws; 9 map<string,int> wxs; 10 map<string,int> wys; 11 12 _for(i,0,wordlist.size()) 13 ws.insert(wordlist[i]); 14 _for(i,0,wordlist.size()) 15 { 16 string tmp = wordlist[i]; 17 _for(j,0,tmp.size()) 18 tmp[j] = tolower(tmp[j]); 19 if(!wxs.count(tmp)) 20 wxs.insert({tmp,i}); 21 } 22 _for(i,0,wordlist.size()) 23 { 24 string tmp = wordlist[i]; 25 _for(j,0,tmp.size()) 26 { 27 tmp[j] = tolower(tmp[j]); 28 if(tmp[j]=='a'||tmp[j]=='e'||tmp[j]=='i' 29 ||tmp[j]=='o'||tmp[j]=='u') 30 tmp[j] = '*'; 31 } 32 if(!wys.count(tmp)) 33 wys.insert({tmp,i}); 34 } 35 36 _for(i,0,queries.size()) 37 { 38 if(ws.count(queries[i])) 39 {rnt.push_back(queries[i]);continue;} 40 41 string tmp = queries[i]; 42 _for(j,0,tmp.size()) 43 tmp[j] = tolower(tmp[j]); 44 auto pp = wxs.find(tmp); 45 if(pp!=wxs.end()) 46 { 47 rnt.push_back(wordlist[pp->second]); 48 continue; 49 } 50 51 _for(j,0,tmp.size()) 52 if(tmp[j]=='a'||tmp[j]=='e'||tmp[j]=='i' 53 ||tmp[j]=='o'||tmp[j]=='u') 54 tmp[j]='*'; 55 auto pp2 = wys.find(tmp); 56 if(pp2!=wys.end()) 57 { 58 rnt.push_back(wordlist[pp2->second]); 59 continue; 60 } 61 rnt.push_back(""); 62 } 63 return rnt; 64 } 65 };