Loading Now

[STL_C++Map] greaterString

STL C++ Map

Đề bài

Cho 2 mảng các chuỗi arr1, arr2 dưới dạng vector. Ứng với mỗi chuỗi trong arr2 bạn cần tìm một chuỗi có thứ tự từ điển nhỏ nhất trong arr1 mà đứng sau arr2 trong từ điển. Nếu không có chuỗi nào trong arr1 thỏa mãn thì output "-1".

Ví dụ

  • Với arr1 = ["codelearn","learncode", "io"],
    arr2 = ["code","war","io"]
    Thì kết quả mong muốn greaterString(arr1, arr2) = ["codelearn","-1","learncode"]

Hướng dẫn.

Sử dụng hàm upper_bound() vừa có thể kiểm tra có tồn tại chuỗi thỏa mãn vừa có thể cho ra phần tử có thứ tự từ điển lớn hơn và nhỏ nhất.

Code mẫu:

vector<string> greaterString(vector<string> arr1, vector<string> arr2)
{
    map <string, bool> cnt;
    for (auto x : arr1)
        cnt[x] = 1;
    vector <string> ans;
    for (auto x : arr2)
    {
        if (cnt.upper_bound(x) != cnt.end())
        {
            auto str = cnt.upper_bound(x);
            ans.push_back(str->first);
        }
        else
        {
            ans.push_back("-1");
        }
    }
    return ans;
}

Post Comment

Contact