获取字符串的所有移动k大小的分区

jee*_*mar 2 clojure

我试图让所有"移动"分区大小为k的字符串.基本上,我想沿着字符串移动一个大小为k的窗口并获得该k字.

这是一个例子,

k:3

输入:ABDEFGH

输出:ABD,EFG,BDE,FGH,DEF

我的想法是沿着输入走,放下一个头和分区,然后从先前(现在无头)序列再次掉头,但我不确定如何做到这一点...而且,也许有更好的方法这样做?以下是我的想法.

(#(partition k input) (collection of s where head was consecutively dropped))
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 7

Clojure中的字符串可以视为字符序列,因此您可以直接对它们进行分区.要获取一系列重叠分区,请使用接受大小和步骤的版本:

user> (partition 3 1 "abcdef")
((\a \b \c) (\b \c \d) (\c \d \e) (\d \e \f))
Run Code Online (Sandbox Code Playgroud)

要将字符序列放回字符串,只需应用于str它:

user> (apply str '(\a \b \c))
"abc"
Run Code Online (Sandbox Code Playgroud)

把它们放在一起:

user> (map (partial apply str) (partition 3 1 "abcdef"))
("abc" "bcd" "cde" "def")
Run Code Online (Sandbox Code Playgroud)