[STL_C++Map] greaterString
Đề 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ốngreaterString(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