We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
// Recursive function to count mismatches between two substrings
size_t get_mismatch_count(const char *r, const char *l, size_t s) {
size_t res = 0;
if (s < 1) return res;
if (s == 1) {
if (memcmp(r, l, s)) res = 1;
return res;
}
size_t m = s / 2;
const char *r_n = r + m;
const char *l_n = l + m;
size_t m_n = s - m;
bool mismatch_l = false, mismatch_r = false;
if (memcmp(r, l, m)) mismatch_l = true;
if (memcmp(r_n, l_n, m_n)) mismatch_r = true;
if (mismatch_l && mismatch_r) {
res = 2;
return res;
}
if (mismatch_l) res += get_mismatch_count(r, l, m);
if (mismatch_r) res += get_mismatch_count(r_n, l_n, m_n);
return res;
}
// Main logic for the virus indices problem
void virusIndices(string p, string v) {
const string no_match = "No Match!";
size_t p_s = p.size();
size_t v_s = v.size();
bool match_found = false;
for (size_t i = 0; i + v_s <= p_s; ++i) {
size_t mismatch_count = 0;
if (memcmp(p.c_str() + i, v.c_str(), v_s) == 0) {
mismatch_count = 0; // Exact match
} else {
mismatch_count = get_mismatch_count(p.c_str() + i, v.c_str(), v_s);
}
if (mismatch_count <= 1) {
cout << i << " ";
match_found = true;
}
}
if (!match_found) cout << no_match;
cout << endl;
}
// Main function to handle multiple test cases
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
string p, v;
cin >> p >> v;
virusIndices(p, v);
}
return 0;
}
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Save Humanity
You are viewing a single comment's thread. Return to all comments →
C+
include
include
include // for memcmp
include // for size_t
using namespace std;
// Recursive function to count mismatches between two substrings size_t get_mismatch_count(const char *r, const char *l, size_t s) { size_t res = 0; if (s < 1) return res;
}
// Main logic for the virus indices problem void virusIndices(string p, string v) { const string no_match = "No Match!"; size_t p_s = p.size(); size_t v_s = v.size(); bool match_found = false;
}
// Main function to handle multiple test cases int main() { ios::sync_with_stdio(false); cin.tie(nullptr);
}