雜記所有題目源**:git位址
題目
方案給定乙個字串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。
注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。
示例 1:
輸入: s =
"barfoothefoobarman"
, words =
["foo"
,"bar"
]輸出:[0,
9]解釋:從索引 0 和 9 開始的子串分別是 "barfoo" 和 "foobar" 。
輸出的順序不重要,[9
,0] 也是有效答案。
示例 2:
輸入: s =
"wordgoodgoodgoodbestword"
, words =
["word"
,"good"
,"best"
,"word"
]輸出:[
]
假設words陣列長度為l,word單詞長度為wl,遍歷字串s, 下標記做i,需要比對的單詞起始座標則為 [i, i+wl, i+2wl … i+(l-1)*wl]
如果i滿足條件,各個單詞的第k位之和一定相等
即:*words[0][k] + words[1][k] + … + words[l-1][k] == s[i + k] + s[i+wl + k] + … + s[i+(l-1)wl + k]
反之,若對於i,滿足後者條件的i則可能為正確結果,這個時候直接校驗即可。
總結:先找出符合特徵的下標,再對符合下標的結果進行校驗,完全符合則輸出。
複雜度計算 雜記class solution
int wlen = words[0].length();
int wtotallen = words[0].length() * words.length;
int slen = s.length();
int flagarray = new int[wlen];
for (int i = 0; i < wlen; i++)
flagarray[i] = flag;
}bitset bs = new bitset(words.length);
for (int i = 0; i <= slen - wtotallen; i++)
if (sumflag != flagarray[j])
}if (j == wlen)
}if (n == words.length)
}if (bs.cardinality() == words.length) }}
return rs;
}}
30 串聯所有單詞的子串 leetcode
好久沒刷題了。今天再刷題記錄下 給定乙個字串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。示例 1 輸入 s barfooth...
leetcode 30 串聯所有單詞的子串
leetcode題目鏈結 題目要求 找出 由words陣列組成的字串 每乙個元素word等長 在字元轉s中的位置 陣列words生成的字典dic2 遍歷字串,從頭開始判斷長度為lenwords的字串 生成的字典dic1 如果dic1 與 dic2 相同,說明找到 def findsubstring ...
leetcode 30 串聯所有單詞的子串
給定乙個字串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。示例 1 輸入 s barfoothefoobarman words...