Advertisement
SalmaYasser

Untitled

Jan 20th, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1.  
  2. int shortest_way (string src , string target)
  3. {
  4.  
  5. unordered_map <char , vector <int>> char_idx;
  6.  
  7. for (int i = 0 ; i < src.size(); i++)
  8. {
  9. char c = src[i];
  10. char_idx[c].push_back(i);
  11. }
  12. int res = 0;
  13. int last = -1;
  14. for (int i = 0 ; i < target.size(); i++)
  15. {
  16. char c = target[i];
  17. //char in target and not in src
  18. if (char_idx.find(c) == char_idx.end())
  19. return -1;
  20. vector <int> vec = char_idx[c];
  21. int idx = upper_bound(vec.begin(), vec.end(), last) - vec.begin();
  22.  
  23. if (idx == vec.size())
  24. {
  25.  
  26. last = -1;
  27. i--; // this element is not found
  28. res++;
  29. continue;
  30. }
  31. last = vec[idx];
  32. if ( last + 1 == src.size())
  33. {
  34. last = -1;
  35. res++;
  36. }
  37.  
  38.  
  39. }
  40.  
  41. return res;
  42.  
  43. }
  44.  
  45. int main() {
  46. cout << shortest_way ("abc","abcbc");
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement