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