Advertisement
nikunjsoni

616

Jun 24th, 2021
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     string addBoldTag(string s, vector<string>& dict) {
  4.         // Step1: get the raw intervals
  5.         set<pair<int, int>> interval_raw;
  6.         for(string d : dict){
  7.             int i = 0;
  8.             while(s.find(d, i) != string::npos){
  9.                 i = s.find(d, i);
  10.                 interval_raw.insert({i, i + d.length() - 1});
  11.                 i++;
  12.             }
  13.         }
  14.          // Step2: get the refined intervals by merging
  15.         vector<pair<int, int>> interval;
  16.         for(auto item : interval_raw){
  17.             int n = interval.size();
  18.             if(n > 0 && item.first <= interval[n-1].second + 1)
  19.                 interval[n-1].second = max(interval[n-1].second, item.second);
  20.             else interval.push_back(item);
  21.         }
  22.        
  23.         // Step3: insert tags based on refined intervals
  24.         string res(s);
  25.         for(int i = 0; i < interval.size(); i++){
  26.             res.insert(interval[i].first + 7 * i, "<b>");
  27.             res.insert(interval[i].second + 7 * i + 4, "</b>");
  28.         }
  29.         return res;
  30.     }
  31. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement