实现模式计数

时间:2017-10-27 15:37:17

标签: r count pattern-matching

我将此伪代码转换为R语言时遇到问题。我的输出不是正确的答案。有人可以帮帮我吗?

PatternCount(Text, Pattern)
    count ← 0
    for i ← 0 to |Text| − |Pattern|
        if Text(i, |Pattern|) = Pattern
            count ← count + 1
    return count

我在此粘贴到现在为止:

PatternCount <- function(text, pattern){
   times <- 0
   for (i in c(0:nchar(text) - nchar(pattern))){
      if (substr(text, i, i + nchar(pattern)) == pattern)
      times <- times + 1}
   return(times)}

提前谢谢!

1 个答案:

答案 0 :(得分:0)

您的索引范围错误,因为R索引是自然计数,也就是从1开始计数,您还必须将substr endmark缩短1:

ibase60.inc

试验:

PatternCount <- function(text, pattern){
  times <- 0
  for (i in 1:(nchar(text) - nchar(pattern))) {
    if (substr(text, i, i + nchar(pattern)-1) == pattern)
    times <- times + 1}
  return(times)
}

这也只是一个渐进式模式匹配,所以链接序列可能无法解析,因为你认为它们会

PatternCount("abaabbbbabbaab", 'aa') #-> 2