From 875b48366c0b03c74bd9473fec6b439ff1268132 Mon Sep 17 00:00:00 2001 From: Lukas Tenbrink Date: Thu, 5 Dec 2024 13:24:05 +0100 Subject: [PATCH] Optimize String.similarity by avoiding allocation for bigrams. --- core/string/ustring.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp index 0e553a5680b..ff9ae073285 100644 --- a/core/string/ustring.cpp +++ b/core/string/ustring.cpp @@ -4002,17 +4002,17 @@ float String::similarity(const String &p_string) const { return 0.0f; } - Vector src_bigrams = bigrams(); - Vector tgt_bigrams = p_string.bigrams(); + const int src_size = length() - 1; + const int tgt_size = p_string.length() - 1; - int src_size = src_bigrams.size(); - int tgt_size = tgt_bigrams.size(); - - int sum = src_size + tgt_size; + const int sum = src_size + tgt_size; int inter = 0; for (int i = 0; i < src_size; i++) { + const char32_t i0 = get(i); + const char32_t i1 = get(i + 1); + for (int j = 0; j < tgt_size; j++) { - if (src_bigrams[i] == tgt_bigrams[j]) { + if (i0 == p_string.get(j) && i1 == p_string.get(j + 1)) { inter++; break; }