我不知道如何用 Javascript 解決這個編碼難題。我從未使用過正則運算式,但我覺得它們是解決它的最佳方法。
比方說,我有這個代碼:
let str = "abcdefabc";
let pattern = "abc";
我需要的是撰寫演算法,它回傳這樣的索引陣列(二維)陣列:
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
其中 index 是 中pattern字母的位置str。例如,withstr = 'abcdefabc'和 patternpattern = 'abc'演算法必須回傳這樣的陣列:
[0, 1, 2](第一個'abc'匹配的 str 內部pattern:“ abc defabc”);[6, 7, 8](匹配的最后一個'abc'內部strpattern:“abcdef abc ”);這些是明顯的例子,但它也必須回傳這些例子:[0, 1, 8]因為“ ab cdefab c ”[0, 7, 8]因為“ a bcdefa bc ”
我希望你明白這個邏輯。的順序pattern很重要:str = 'fox1423423man_united_x'withpattern ='fox'必須回傳[[0, 1, 2], [0, 1, 21]];
str = 'googlewithpattern ='fox'必須回傳null,因為兩者之間沒有“狐貍”;
str = 'xof'withpattern ='fox'必須回傳null,因為字母的走向很重要;
所有字串都是小寫的
uj5u.com熱心網友回復:
這是一個通過遞回解決它的解決方案。
它使用舊的 indexOf 來查找字符的位置。
function findTokenPositions(str, tokens) {
let arr = [];
function recurse (strpos=0, tok=0, accum=[]) {
if (tok >= tokens.length) { arr.push(accum); return; }
strpos = str.indexOf(tokens[tok], strpos);
if (strpos < 0) { return; }
accum[tok] = strpos;
recurse(strpos 1, tok 1, [...accum])
recurse(strpos 1, tok, [...accum]);
}
recurse(0, 0);
return arr;
}
let tests = [
["abcdefabc", "abc"],
["fox1423423man_united_x", "fox"],
["hound", "fox"]
];
tests.forEach(x => {console.log(x[0] ':' x[1] '-->' JSON.stringify(findTokenPositions(x[0], x[1])))});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427023.html
標籤:javascript 正则表达式 算法
上一篇:從查找表中確定陣列元素的最快方法
下一篇:用平面切割網格的演算法
