Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int shortest_way (string src , string target)
- {
- unordered_map <char , vector <int>> char_idx;
- for (int i = 0 ; i < src.size(); i++)
- {
- char c = src[i];
- char_idx[c].push_back(i);
- }
- int res = 0;
- int last = -1;
- for (int i = 0 ; i < target.size(); i++)
- {
- char c = target[i];
- //char in target and not in src
- if (char_idx.find(c) == char_idx.end())
- return -1;
- vector <int> vec = char_idx[c];
- int idx = upper_bound(vec.begin(), vec.end(), last) - vec.begin();
- if (idx == vec.size())
- {
- last = -1;
- i--; // this element is not found
- res++;
- continue;
- }
- last = vec[idx];
- if ( last + 1 == src.size())
- {
- last = -1;
- res++;
- }
- }
- return res;
- }
- int main() {
- cout << shortest_way ("abc","abcbc");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement