获取字符串向量元素之间的最小共享部分

Posted

技术标签:

【中文标题】获取字符串向量元素之间的最小共享部分【英文标题】:Get minimal shared part between elements of string's vector 【发布时间】:2014-01-19 06:49:28 【问题描述】:

有一个字符串向量列表:

xx <- c("concord wanderer basic set air snug beige",
  "concord wanderer basic set air snug black noir", 
  "concord wanderer basic set air snug blue bleu", 
  "concord wanderer basic set air snug brown marron", 
  "concord wanderer basic set air snug green vert", 
   "concord wanderer basic set air snug grey gris", 
   "concord wanderer basic set air snug red rouge", 
   "concord wanderer basic set air snug rose" )

我试图在向量的元素之间获得最小的共享部分,例如,在这里我应该得到:

"concord wanderer basic set air snug"

xx 是前一个过程的结果,所以我确信元素之间存在共享部分。但删除的部分并不总是在字符串的末尾。

使用strsplit`table 我得到了这个部分解决方案,但它有点棘手,我失去了原来的词序:

table_x <- table(unlist(strsplit(xx,' ')))
paste(names(table_x[table_x==max(table_x)]),collapse=' ')
[1] "air basic concord set snug wanderer"

我很确定有更好的解决方案。我尝试使用agrepadist,但没有取得很大成功。

【问题讨论】:

【参考方案1】:

您可以使用intersectReduce 来获得您想要的输出。

paste(Reduce(intersect, strsplit(xx, " ")), collapse=" ")
#[1] "concord wanderer basic set air snug"

【讨论】:

喜欢您的解决方案。如此优雅。

以上是关于获取字符串向量元素之间的最小共享部分的主要内容,如果未能解决你的问题,请参考以下文章

字符串和向量元素之间的区别<string> [重复]

在一组三个向量中找到最接近的三元组?

Boost、共享内存和向量

push_back 通过自创对象获取最后一个元素的向量

将向量中的所有元素组合成一个新的字符串 MFC VC++

迭代器可以在 C++ 中的向量之间共享吗?