已知乙個字串陣列words,要求尋找其中兩個沒有重複字元的字串,使得這兩個字串的長度乘積最大,輸出這個最大的乘積。如:
words=[「abcd」,「wxyh」,「defgh」], 其中不包含重複字元的兩個字串是"abcd"和"wxyh",則輸出16
words=[「a」,「aa」,「aaa」,「aaaa」], 找不到滿足要求的兩個字串,則輸出0。
由於測試用例的問題,這道題直接暴力破解是沒有問題的,在考慮到時間複雜性上,我才用了一種新的思路。
暴力破解最大的問題在於需要直接會重複比較字串,如果想要去除冗餘,我們就應該保留比較的資訊。遍歷字串中的每乙個字元,為每乙個字元保留乙個vector記錄所有含有該字元的字元下標,那麼同乙個vector陣列中的字元一定是有重複的,到最後就可以找到所沒有重複的字元讀組。
這種思路是用空間複雜性換取時間複雜性,需要為每乙個字元保留乙個對映,初始假設所有字串之間都是沒有重複的,隨著重複字元的出現消去所有重複的串對。
#include
#include
#include
#include
using
namespace std;
vector v;
vector<
int> l;
map<
char
,vector<
int>
int len;
void
stringsplit
(const string& s,vector
&v,const string c)
if(pos1length()
)}intmain()
int i;
for(i=
0;ivectorint>
>
lens
(len,vector<
int>
(len,1)
);vector<
int>
::iterator it;
for(i=
0;isize()
;i++)}
].push_back
(i);}}
int maxv=
0,mx;
for(i=
0;i(l[i]
*mx>maxv)
maxv=l[i]
*mx;
} cout
}
公共最大字串長度
無題 要求輸出最大公共字串長度和執行次數。將來還要輸出,最大字串。輸入案例 7 6abcbdab bdcaba 4 4abcd abcd 4 5abcd acbcc 輸出答案 寫的很笨,先記著怎麼寫等用到時在仔細研究吧 基本思路就是這個表 有斜槓的表示加一的操作。my answer include ...
最大遞增子字串長度
遞迴策略 記憶陣列 int result int arr 100 記憶陣列,前面計算過的直接在這裡查就行了,不用在遞迴裡重複操作了,時間複雜度o n 2 int memo 100 返回以arr n 結尾的最長子字串長度 intf int n memo n result return result i...
字串長度
當字元全是英文本元的時候,兩者是一樣。這裡主要比較一下,中英文混排的時候,兩個計算結果。測試時編碼方式是utf8 複製 如下 str 中文a字1符 echo strlen str echo echo mb strlen str,utf8 輸出結果 14 6 結果分析 在strlen計算時,對待乙個u...