【问题标题】:R - count consecutive alphabets in a stringR - 计算字符串中的连续字母
【发布时间】:2019-06-27 07:27:38
【问题描述】:

我想知道一个字符串中最大连续字母数的长度(不包括顺序)。例如:

ashjklmghipo

这里我们有连续的字母:jklm、ghi、po。最大连续字母为 jklm。所以长度是4。

我对连续数字做了同样的事情,但不知道如何为字母做这个。 任何帮助将不胜感激。 TIA :)

【问题讨论】:

  • 当您说“排除顺序”时,您的意思是不对字符串进行排序,是吗?因为,如果我对该字符串进行排序,它将是 5 个连续的字母:“ijklm”。

标签: r


【解决方案1】:

将其简化为您已经解决的问题:

x = "ashjklmghipo"
x_letters = strsplit(x, "")[[1]]
x_digits = match(x_letters, letters)
x_digits
# [1]  1 19  8 10 11 12 13  7  8  9 16 15

不,您需要找到x_digits 中连续数字的最大数量,您说您已经知道该怎么做。 (如果您需要这方面的帮助,see this question。)

【讨论】:

  • 另一个选项是utf8ToInt(x)
  • 万一max(tabulate(cumsum(c(FALSE, diff(utf8ToInt(x)) != 1))))
【解决方案2】:

我在想如何用一些矩阵运算符来解决,但我只用递归策略解决了它。

希望对你有用:
OBS:R 有一个名为 letters 的全局变量

#Get string
x = "ashjklmghipo"

#split in char
l = strsplit(x, "")[[1]]
# sort if you want
# l = sort(l)

# Creating data.frame with inital letter: 'init' and number of consecutives: 'n'
nleters = data.frame(init = l, n = 0)

# Using recursive strategi
kmax = length(l)

for(k in 1:kmax){
  # var letters is sorted in alphabet order
  aux = (letters[letters >= l[k]] == l[k:kmax])
  for(i in 1:length(aux)){
    # test if 
    if(aux[i]){
      nleters[k,"n"] = nleters[k,"n"] + 1
      # in first non consecutive "aplhabet" breaks inner loop
    }else{break()}
  }
}

# print result
nleters[order(-nleters$n),]

【讨论】:

    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多