【问题标题】:String match algorithms in RR中的字符串匹配算法
【发布时间】:2016-03-31 10:11:33
【问题描述】:

我想找到字符串匹配,其中包含从一开始就匹配的字符数。我有两个字符串a <- "ABCDBADCABC"b <- "ABC"。我想在a 中找到b 的匹配项。我很想知道b <- "ABC" 是否存在于a <- "ABCDBADCABC" 的开头。除了开始之外,我不是在寻找字符串匹配的其他位置。

其他示例: b <- ABCDBADCABCa <- "ABCDAB",这里只有a的四个字符与b开头匹配。所以输出将是来自aABCD 匹配。 R 中有哪些可用选项来执行此操作。

【问题讨论】:

    标签: r string algorithm match


    【解决方案1】:

    我会保持简单,让 ab 向量包含单个字符。那么字符串匹配就很简单了。

    ## Make a and b
    b = "ABCDBADCABC"
    a = "ABCDAB"
    

    求最短向量的长度

    min_char = min(nchar(a), nchar(b))
    

    然后将ab分开

    a_split =  strsplit(substr(a,1, min_char), "")[[1]]
    b_split =  strsplit(substr(b,1, min_char), "")[[1]]
    

    使用标准运算符进行比较

    comp = a_split == b_split
    

    找到FALSE的第一个匹配项

    which.min(comp) - 1
    

    用更少的代码:

    compare(a, b)
    

    在哪里

    compare = function(a, b) {
      min_char = min(nchar(a), nchar(b))
      a_split =  strsplit(substr(a,1, min_char), "")[[1]]
      b_split =  strsplit(substr(b,1, min_char), "")[[1]]
      comp = a_split == b_split
      which.min(comp) - 1
    }
    

    【讨论】:

    • 感谢您的回答。是不是代码少了点。
    • 如果你想要更少的代码,你可以在codegolf.stackexchange.com 发帖试试运气。 SO 不适用于较短的代码竞赛。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2016-07-19
    • 2021-11-06
    相关资源
    最近更新 更多