lower_bound()返回最后一个元素

时间:2018-11-05 08:44:14

标签: c++ algorithm

当我解决392.Is Subsequence的问题时。在Leetcode上。

当我使用lower_bound()的功能时,我无法理解要找到最后一个元素与没有找到它然后返回最后一个元素之间的区别。

这是我的代码:

class Solution {
public:
    bool isSubsequence(string s, string t) {
        vector<vector<int>> temp(26);
        for (int i = 0; i < t.length(); ++i)
            temp[t[i]-'a'].push_back(i);
        int index = -1;
        for (int i = 0; i < s.length(); ++i) {
            auto it = upper_bound(temp[s[i]-'a'].begin(), temp[s[i]-'a'].end(), index);

            //if the last element is we want to find what will happen?
            if (it == temp[s[i]-'a'].end()) return false;
            index = *it;
        }
        return true;
    }
};

如果最后一个元素是我们想找到会发生什么?

1 个答案:

答案 0 :(得分:2)

end()不指向最后一个元素,它指向超出的最后一个元素。强调我的:

  

将迭代器返回到给定容器c或数组数组的末尾(即最后一个元素之后的)。

如果最后一个元素是您要查找的内容,则lower_bound将返回end() - 1