【问题标题】:Finding letters in strings in different orders以不同的顺序在字符串中查找字母
【发布时间】:2015-11-26 07:48:51
【问题描述】:

我有 2 个代表树的字符串。每个“{”都意味着要在树中的较低级别(孩子)。 每个字符串包含一个或多个除以“{”的字母(或单词)。 我只想转换相同级别的字母 - 第二个(或第一个)字符串与另一个字符串中的字母顺序相同,而不更改字符串中的位置。 示例如下:

> str1<-"{a{b}{c{{d}{e}}}}" 
> str2<-"{a{c}{b{{e}{d}}}}"

我想将 str2 更改为“{a{b}{c{d{e}}}}”。由于 'b' 和 'c' 都处于同一级别(str1 和 str2 中的 'a' 的孩子),它们仅在 str1 和 str2 中的顺序不同。 'd' 和 'e' 也是如此。我想将它们在 str2 中更改为 str2

 > str1<-"{a{b}{c{{d}{e}}}}" 
 > str2<-"{a{b}{c{{d}{e}}}}"

这对我来说是解决这个问题的一个很好的中间解决方案。 命令 sort (x) 用于向量。我想使用字符串并保留'{'的位置。这意味着我们只能对相同级别的节点(兄弟姐妹)进行排序,但不能在更高级别之间进行排序。比如下面这种情况:

> str1<-"{a{b}{c}}" 
> str2<-"{b{a}{c}}"

因为 'a' 是根,而 'b' 是他的孩子,反之亦然,对于 str2,我们无法对这种情况进行排序。我们可以在以下情况下进行排序:

> str1<-"{a{b}{c}}" 
> str2<-"{a{c}{b}}"

因为在上面的例子中,{a} 是根,而 {b} 和 {c} 是 {a} 的同等级别的孩子。

【问题讨论】:

  • 你的符号是否有额外的大括号为你去的每一级?这就是为什么str1&lt;-"{a{b}{c{{d}{e}}}}" 而不是str1&lt;-"{a{b}{c{d}{e}}"
  • C8H10N4O2,感谢您的评论。是的,每个级别都由其更高级别用 { 分隔。如果 'a' 是根并且有 2 个孩子 b,它将如下所示:{a{b}{c}}。如果 'b' 有额外的孩子,让我们说 'd' 和 'e' 它将如下所示:{a{b {d} {e} } {c}}。 {b} 和 {c} 是兄弟姐妹(同一级别)。此外,{d} 和 {e} 是兄弟姐妹(同一级别)。
  • 有趣的问题。您是否尝试将这些树存储在字符串以外的数据类型中?例如,列表?
  • C8H10N4O2 谢谢!这就是为什么我需要你的帮助:)。我想使用向量,因为它们的顺序功能。但是,由于兄弟姐妹的限制,它没有帮助。

标签: r string sorting


【解决方案1】:

这里有一个提示——要符合交换条件,您不需要“父代”相同,只需“代”(树的级别或深度)相同即可。您可以从{ 的计数减去} 的计数得到这个深度。我不明白你的大括号约定,但只要它是统一的,那么它应该识别同一代的成员。

> str1<-"{a{b}{c{{d}{e}}}}" 

> require(stringr)
> str_match <- str_extract_all(str1,"\\w+")[[1]]
> str_match
[1] "a" "b" "c" "d" "e"

> str_loc <- str_locate_all(str1,"\\w+")[[1]]
> str_loc
     start end
[1,]     2   2
[2,]     4   4
[3,]     7   7
[4,]    10  10
[5,]    13  13

> prior_str <- str_sub(str1, end=str_loc[,'start'])
> prior_str
[1] "{a"            "{a{b"          "{a{b}{c"       "{a{b}{c{{d"    "{a{b}{c{{d}{e"

> str_depth <- str_count(prior_str,"[{]") - str_count(prior_str,"[}]")
> str_depth
[1] 1 2 2 4 4

希望你对 R 有足够的了解,可以从那里得到它。

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多