1.我希望生成给定单词的字符组合,每个字母连续重复最多2次,至少为1.所得单词的长度不等。例如来自
"cat"
到
"cat", "catt", "caat", "caatt", "ccat", "ccatt", "ccaat", "ccaatt"
所需函数采用长度为n的单词并生成2 ^ n个不等长的单词。它几乎类似于二进制数字,n长度给出2 ^ n个组合。例如,一个3位二进制数给出
000 001 010 011 100 101 110 111
组合,其中0 = t且1 = tt。
2.同样的函数也应该限制结果序列的最大值,最多连续2次重复一个字符,即使给定的单词有重复的字母。例如
"catt"
到
"catt" "ccatt" "caatt" "ccaatt"
我试过这样的事情
pos=expand.grid(l1=c(1,11),l2=c(2,22),l3=c(3,33))
result=chartr('123','cat',paste0(pos[,1],pos[,2],pos[,3]))
#[1] "cat" "ccat" "caat" "ccaat" "catt" "ccatt" "caatt" "ccaatt"
它给出了正确的序列,但我坚持将它推广到任何给定的不同长度的单词。
谢谢。
答案 0 :(得分:1)
打印(" Hello,world!")
x="cat"
l=seq(nchar(x))
n=paste(l,collapse="")
m=split(c(l,paste0(l,l)),rep(l,2))
chartr(n,x,do.call(paste0,expand.grid(m)))
答案 1 :(得分:0)
1.仅仅是Onyambu给出的答案的补充,以解决问题的第二部分,即在输入字中任意数量的连续重复字符的情况下,将输出限制为最多2次连续重复的字符。
x="catt"
l=seq(nchar(x))
n=paste(l,collapse="")
m=split(c(l,paste0(l,l)),rep(l,2))
o <- chartr(n,x,do.call(paste0,expand.grid(m)))
下面的代码行会删除包含2个以上连续重复字符的单词
unique(gsub('([[:alpha:]])\\1{2,}', '\\1\\1', o))
#[1] "catt" "ccatt" "caatt" "ccaatt"
2.如果您希望从"cat" to "ccaattt"
开始的所有组合在输入字中给出任意数量的连续重复字符。代码是
x1="catt"
下面一行代码将连续重复的字符限制为1。
x2= gsub('([[:alpha:]])\\1+', '\\1', x1)
l=seq(nchar(x2))
n=paste(l,collapse="")
m=split(c(l,paste0(l,l)),rep(l,2))
o <- chartr(n,x,do.call(paste0,expand.grid(m)))
unique(gsub('([[:alpha:]])\\1{2,}', '\\1\\1', o))
#[1] "cat" "ccat" "caat" "ccaat" "catt" "ccatt" "caatt" "ccaatt"