From afea32183c7dbe1866a15b6f71d502c3345c89cc Mon Sep 17 00:00:00 2001 From: mrplesk2 Date: Sat, 18 Oct 2025 22:43:11 +0300 Subject: [PATCH] Add hide-secret task --- hide-secret.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 hide-secret.cpp diff --git a/hide-secret.cpp b/hide-secret.cpp new file mode 100644 index 0000000..0dc2c98 --- /dev/null +++ b/hide-secret.cpp @@ -0,0 +1,62 @@ +#include + +void hide_secret(char* const text, const char* const secret) { + if (text == nullptr || secret == nullptr){ + return; + } + + int m = 0; + const char* temp = secret; + while (*temp != '\0') { + m++; + temp++; + } + + if (m == 0) { + return; + } + + std::vector lps(m); + + int len = 0; + lps[0] = 0; + + int i = 1; + while (i < m) { + if (secret[i] == secret[len]) { + len++; + lps[i] = len; + i++; + } else { + if (len != 0) { + len = lps[len - 1]; + } else { + lps[i] = 0; + i++; + } + } + } + + int j = 0; + i = 0; + + while (text[i] != '\0') { + if (secret[j] == text[i]) { + j++; + i++; + } + + if (j == m) { + for (int k = i - j; k < i; k++) { + text[k] = 'x'; + } + j = lps[j - 1]; + } else if (text[i] != '\0' && secret[j] != text[i]) { + if (j != 0) { + j = lps[j - 1]; + } else { + i++; + } + } + } +} \ No newline at end of file