單詞子集 特徵思想的運用

2021-10-04 02:19:33 字數 1525 閱讀 1445

1

<= a.length, b.length <=

10000

c++ 函式形式為:vector

wordsubsets

(vector

& a, vector

& b)

此題**於leetcode

查詢單詞問題,首選仿造的雜湊表,只需要對a的每個單詞,在b中遍歷所有的單詞,看是否滿足就行了。

class

solution

for(k=

0;ksize()

;k++

)else

break;}

if(h==b[k]

.size()

)continue

;else

break;}

if(k==b.

size()

) result.

push_back

(a[i]);

else

continue;}

return result;}}

;

這段**並沒有錯誤,但是實在是太暴力了,因為已經達到o(n^3)了,當然沒有通過。

於是思考怎麼優化。。。。。。

首先想得是怎麼把這個三層迴圈變成二層迴圈,二層肯定是必須得,因為必須遍歷到a中得所有單詞嘛,所有目光就投向了b陣列。

題目的意思是如果b中每個單詞都是a中乙個單詞的子集的話,那麼a中的那個單詞就算是乙個通用單詞,所有我們可以找辦法一次性,將b中的單詞合起來,何a中的乙個單詞比較。

因為上面暴力比較的核心就是每個單詞出現的次數,所以我們組合起來的那個b單詞,應該包含每個小單詞中字元出現次數最高的那個字元。

這個在b中小單詞**現次數最高的字元就是特徵字元,因為只要單詞中這個字元的數量都匹配了,那麼其餘小單詞肯定是匹配的。

這種思想,叫做特徵思想

這樣我們就可以把乙個記憶體的迴圈轉變為外層的迴圈,而且因為每個單詞的字元都小於10,所以可以忽略不計,時間複雜度接近o(n)

class

solution

for(m =

0; m <

26; m++)}

for(i =

0; i < a.

size()

; i++

)for

(m =

0; m <

26; m++)if

(m ==

26) result.

push_back

(a[i]);

}return result;}}

;

atfwus  --writing  by 2020–03–18

子集和問題 基於dfs的回溯思想

子集和問題 description 子集和問題的乙個例項為 s,t 其中,s 是乙個正整數的集合,c是乙個正整數。子集和問題判定是否存在s的乙個子集s1,使得 試設計乙個解子集和問題的回溯法。對於給定的正整數的集合s 和正整數c,計算s 的乙個子集s1,使得 input 輸入資料的第1 行有2 個正...

運用CS LBP提取裂紋的梯度特徵

目前對cs lbp 的理解是cs lbp只能描述電池片裂紋的梯度特徵 cs lbp值的大小代表的是方向,每乙個值出現的頻率代表的大小。cs lbp作為一種特徵描述的方法,所提取的特徵向量維數小,並且對銻度變化響應明顯,這也就是為什莫選用它作為裂紋特徵提取主要原因。而缺點只能描述梯度特徵,一旦雜訊干擾...

物件導向思想的三大特徵

封裝性 繼承性 多型性 二 繼承性 問題 為什麼有繼承這個概念?例如我們建立乙個學生類 student 教師類 teacher 家長類 parent 這三個類中都會有的屬性 姓名 年齡 性別等等 這三個類中都會有的方法有 走路 吃飯 睡覺等等。如果建立完成這三個類,那麼這些重複的屬性和方法就會重複,...