非常に遅くなる可能性のある正規表現を使用しないと、手を動かす2つのカーソルを使用するのがベストだと思います。アルゴリズムは、以下のJSコードからかなり明らかです。次の値をとりますts
プロセス全体を通じて
function getNborDupes(s){
var cl = 0, // cursor left
cr = 0, // cursor right
ts = "", // test string
res = []; // result array
while (cl < s.length){
cr = cl;
while (++cr < s.length){
ts = s.slice(cl,cr); // ts starting from cl to cr (char @ cr excluded)
// check ts with subst from cr to cr + ts.length (char @ cr + ts.length excluded)
// if they match push it to result advance cursors to cl + ts.length and continue
ts === s.substr(cr,ts.length) && (res.push(ts), cl = cr += ts.length);
}
cl++;
}
return res;
}
var str = "ABCDDEFGHFGH";
console.log(getNborDupes(str));
。
A
AB
ABC
ABCD
ABCDD
ABCDDE
ABCDDEF
ABCDDEFG
ABCDDEFGH
ABCDDEFGHF
ABCDDEFGHFG
B
BC
BCD
BCDD
BCDDE
BCDDEF
BCDDEFG
BCDDEFGH
BCDDEFGHF
BCDDEFGHFG
C
CD
CDD
CDDE
CDDEF
CDDEFG
CDDEFGH
CDDEFGHF
CDDEFGHFG
D
E
EF
EFG
EFGH
EFGHF
EFGHFG
F
FG
FGH
cl = cr += ts.length
一部が再起動し、一致する部分文字列の前または後からの検索をするか否かを判断するけど。現在のところ、上記のコードです。 "ABABABAB"
入力は["AB","AB"]
を返しますが、cr = cl += ts.length
にすると結果は["AB", "AB", "AB"]
になるはずです。
'duplicate'の意味を説明できますか? 'duplicate'は最初の文字の直後に自分自身を返すサブストリングですが、duplicateはサブストリングを意味します。私たちはあなたを助けることができるように具体的にしようとしている –
@ Oriel.F混乱のために申し訳ありません。今は明らかですか? – maple
「AAAA」の正しい答えは何ですか?おそらくそれは '' ''、 'AA' 'という集合ですが、重複した 'A'が3回出現することを考慮する必要がありますか? – Gassa