#include #include #include std::vector buildMask(const std::string& main_string, const std::vector& substrings) { std::vector bold_mask(main_string.size(), false); for (const auto& substring : substrings) { const auto substring_index = main_string.find(substring); if (substring_index != main_string.npos) { for (size_t mask_i = substring_index; mask_i < substring_index + substring.size(); ++mask_i) { bold_mask[mask_i] = true; } } } return bold_mask; } std::string emboldenString(const std::string& main_string, const std::vector& substrings) { std::vector bold_mask = buildMask(main_string, substrings); std::string embolded_string; bool is_bold_now = false; for (size_t mask_i = 0; mask_i < bold_mask.size(); ++mask_i) { if (!is_bold_now) { if (bold_mask[mask_i]) { embolded_string += ""; embolded_string += main_string[mask_i]; is_bold_now = true; } else { embolded_string += main_string[mask_i]; } } else { if (bold_mask[mask_i]) { embolded_string += main_string[mask_i]; } else { embolded_string += ""; embolded_string += main_string[mask_i]; is_bold_now = false; } } } if (is_bold_now) { embolded_string += ""; } return embolded_string; } int main() { std::string main_string = "I despise leetcode kind of problems."; std::vector substrings = {"despise", "pise", "I", "s."}; std::cout << emboldenString(main_string, substrings) << '\n'; }