Dopóki a
i b
mają taką samą długość możemy to zrobić:
s.a <- strsplit(a, "")[[1]]
s.b <- strsplit(b, "")[[1]]
paste(s.a[s.a != s.b], collapse = "")
dawanie:
[1] "Hd"
To wydaje się proste pod względem czytelności kodu i wydaje wiązanej dla najszybsze z podanych tu rozwiązań, chociaż myślę, że wolę f3
:
f1 <- function(a, b)
paste(setdiff(strsplit(a,"")[[1]],strsplit(b,"")[[1]]), collapse = "")
f2 <- function(a, b)
paste(sapply(setdiff(utf8ToInt(a), utf8ToInt(b)), intToUtf8), collapse = "")
f3 <- function(a, b)
paste(Reduce(setdiff, strsplit(c(a, b), split = "")), collapse = "")
f4 <- function(a, b) {
s.a <- strsplit(a, "")[[1]]
s.b <- strsplit(b, "")[[1]]
paste(s.a[s.a != s.b], collapse = "")
}
a <- "Happy day"
b <- "Tappy Pay"
library(rbenchmark)
benchmark(f1, f2, f3, f4, replications = 10000, order = "relative")[1:4]
podając następujące na świeżym sesji na moim laptopie:
test replications elapsed relative
3 f3 10000 0.07 1.000
4 f4 10000 0.07 1.000
1 f1 10000 0.09 1.286
2 f2 10000 0.10 1.429
mam przyjąć, że różnice muszą być w odpowiednich pozycjach znaków. Możesz wyjaśnić, czy to jest intencja, czy nie.
Proponuję cofnąć edycję i zadać nowe pytania tację. W tym nowym pytaniu będziesz musiał podać znacznie więcej informacji o swoich prawdziwych danych. Na przykład bardzo ważne jest, czy wiesz, że różne ciągi są na początku, czy na końcu łańcucha. Musisz również poinformować nas, jeśli Twój problem w ogóle odnosi się do [najdłuższego wspólnego problemu z podciąganiu] (http://en.wikipedia.org/wiki/Longest_common_substring_problem). – Andrie
Uzgodniono, cofnij edycję, zaakceptuj najlepszą odpowiedź i zadaj nowe pytanie.Pytanie jest zasadniczo odmienne, a wiele osób już włożyło dużo pracy. – BrodieG