【问题标题】:How to generate word sequence如何生成词序列
【发布时间】:2018-03-08 18:19:18
【问题描述】:

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" 

它给出了正确的序列,但我坚持将它推广到任何不同长度的给定单词。

谢谢。

【问题讨论】:

  • 编辑您的问题并将您的代码放入其中。

标签: r regex string combinations seq


【解决方案1】:

正常使用标准输出...

print("你好,世界!")

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)))

【讨论】:

  • 非常感谢@Onyambu。它适用于没有重复的输入单词。但是当输入单词重复时,结果序列超过了 2 次重复。例如"caa" 给出#[1] "caa" "ccaa" "caaa" "ccaaa" "caaa" "ccaaa" "caaaa" "ccaaaa" 我想我可以解决第二部分。我将编辑我的问题并发布答案。谢谢
【解决方案2】:

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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多