トピック説明
この最後の質問は、2019年9月1日LeetCode週のレースの対象であります
タイトル説明
与えられたに関しては
例えば、パズルは、「ABCDEFG」、そして有効な言葉は「直面」している、「キャベツ」、および「荷物」のであれば、無効な単語は「強化し」(「A」を含んでいない)と、「基づく」されている間(パズルにない「S」を含みます)。 配列を返し |
サンプル
入力: 言葉 = [ " AAAA "、" ASAS "、" できる"、" 能力"、" ACTT "、" 俳優"、" アクセス" ]、 パズル = [ " aboveyz "、" abrodyz "、" abslute "、" absoryz " "actresz " " gaswxyz" ] 出力:[ 1、1、3、2、4、0 ] 説明: 1つの有効な単語のための " aboveyz ":" AAAA " 1つの有効な単語のための " abrodyz ":" AAAA " 3つの有効な単語のための " abslute ":" AAAA " " ASAS " "できます" 2つの有効な言葉のための " absoryz ":" AAAA "、" ASAS " 4つの有効な言葉のための " actresz ":" AAAA "、" ASAS "、" ACTT "、" アクセス" があり' "gaswxyz"原因なしには有効な単語を再んリスト内の単語の文字が含ま「グラムを」。
条件
|
問題解決のためのアイデア
①最初のトラバーサルワード再び、次いで(インデックスとして単語文字-'a」の内部、すなわち、)を指標として、各単語の文字の内側は、対応するアレイに配置されたワード ②ワードに対応する一意の値を算出します 私は、26進表現を使用して、例えば、A-B-A 11のように表現してい << 1(()繰返さない文字に対応する - 「A」)に対応する文字の位置を算出します 反復文字が考慮されないように第11及び第2の表現Bを発現しました ③アレイトラバーサルパズルは、また、単語に対応する対応する一意の値を算出し、トラバース次に、タイトルの単語検索満たす意味(タイトル要件が意図され、単語に含まれるワードパズルの最初の文字)の最初の文字を使用して配列のインデックスに対応するワード ④対象単語を決定する条件を満たしています 使用される方法は、一意の値が等しくなるように決定されるビット操作とワード操作の操作に対応するユニークワードパズルの値によって決定される固有の値であり、条件が満たされ 如単語= "A"、パズル= "AB" 111の値のみ 操作された後1& &演算子よりも低い優先順位==:それはことに留意すべきです |
コード
vector<int>w; vector<int>wf[26]; bool vis[26]; vector<int> findNumOfValidWords(vector<string>& words, vector<string>& puzzles) { for(int i=0;i<words.size();i++){ memset(vis,false,sizeof(vis)); int tmp = 0; for(int j=0;j<words[i].size();j++){ if(!vis[words[i][j]-'a']){ tmp+=(1<<(words[i][j]-'a')); vis[words[i][j]-'a']=true; wf[words[i][j]-'a'].push_back(i); } } w.push_back(tmp); } vector<int>res; for(int i=0;i<puzzles.size();i++){ int index = puzzles[i][0]-'a'; int h = 0; for(int j=0;j<7;j++){ h+=(1<<(puzzles[i][j]-'a')); } int cnt =0 ; for(int j=0;j<wf[index].size();j++){ if((w[wf[index][j]]&h)==w[wf[index][j]]){ cnt++; } } res.push_back(cnt); } return res; }