给你一个字符串 s,找出它的所有子串并按字典序排列,返回排在最后的那个子串。
示例 1:
输入:"abab"
输出:"bab"
解释:我们可以找出 7 个子串 ["a", "ab", "aba", "abab", "b", "ba", "bab"]。按字典序排在最后的子串是 "bab"。
示例 2:
输入:"leetcode"
输出:"tcode"
提示:
1 <= s.length <= 10^5
s 仅含有小写英文字符。
解题:
class Solution {
public:
string lastSubstring(const string& s)
{
string result;
auto beg = s.begin();
auto end = s.end();
auto start = std::max_element(beg, end);
size_t pos = 0;
while(start != end)
{
if (++pos <= (end - start))
{
if (result.compare(0, result.size(), s, start - beg, pos) < 0)
{
result.assign(s, start - beg, pos);
}
}
else
{
start = std::max_element(start + 1, end);
if (*start != *result.begin())
break;
pos = 0;
}
}
return result;
}
};
结果:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/last-substring-in-lexicographical-order