R - считать последовательные алфавиты в строке - PullRequest
1 голос
/ 27 июня 2019

Я хочу знать длину максимального количества последовательных алфавитов в строке (без учета порядка). например:

ashjklmghipo

здесь у нас есть последовательные алфавиты: jklm, ghi, po. Максимальные последовательные алфавиты jklm. поэтому длина 4.

Я сделал то же самое для последовательных цифр, но не знаю, как это сделать для алфавитов. Любая помощь будет высоко оценена. TIA:)

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

Сведите это к проблеме, которую вы уже решили:

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, которое, как вы говорите, вы уже знаете, как сделать. (Если вам нужна помощь, см. Этот вопрос .)

0 голосов
/ 27 июня 2019

Я думал о том, как сделать это с каким-то матричным оператором, но я решил это только с помощью рекурсивной стратегии.

Надеюсь, это будет полезно:
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),]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...