Gegeben eine Zeichenfolge, ich möchte jede mögliche Teilzeichenfolge in der Zeichenfolge berechnet. Zum Beispiel gegeben einen StringZählen Sie das Auftreten aller möglichen Teilstrings und deren Auftreten
str = "abab"
Ich möchte alle möglichen Teilstrings und ihre Werte berechnen:
"A" = 2
"B" = 2
"AA" = 0
"AB" = 2
"BA" = 1
"BB" = 0
I wie unten eine Funktion geschrieben haben:
countSubstrings <- function(string_try ="", items = NULL)
{
string_try <- toupper(string_try)
if(is.null(items))
{
items <- strsplit(string_try, "")[[1]]
}
n <- length(unique(items))
counts_substrings <- c()
substrings_all <- c()
for (i in 1:n) # Number of characters in substring
{
substrings_combo <- gtools::permutations(n, i, unique(items), repeats=TRUE)
print(paste("The number of combinations is: ",
nrow(substrings_combo), "for substrings of length", i))
for(j in 1:nrow(substrings_combo))
{
tosearch <- paste(substrings_combo[j,], collapse = "")
substrings_all <- c(substrings_all, tosearch)
total <- sum(grepl(tosearch,
sapply(1:(nchar(string_try) - 1),
function(ii) substr(string_try, ii, ii + 1))))
counts_substrings <- c(counts_substrings, find_overlaps(tosearch, string_try))
}
}
return(list(substrings_all,counts_substrings))
}
Es tut, was ich will aber es ist lächerlich langsam. Ein möglicher Fehler, den ich sehe, ist, dass mein Programm Teilstrings "aaa" betrachtet, selbst wenn das Auftreten von "aa" gleich Null ist. Dies ist in der Sequenzanalyse und im Muster-Mining beliebt. Ich frage mich, ob es schon eine schnellere Implementierung gibt oder irgendwie optimiert werden kann. Brauchen Sie eine R-Lösung.