<p>Given a string <code>s</code>, return <em>the last substring of</em> <code>s</code> <em>in lexicographical order</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;abab&quot;
<strong>Output:</strong> &quot;bab&quot;
<strong>Explanation:</strong> The substrings are [&quot;a&quot;, &quot;ab&quot;, &quot;aba&quot;, &quot;abab&quot;, &quot;b&quot;, &quot;ba&quot;, &quot;bab&quot;]. The lexicographically maximum substring is &quot;bab&quot;.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;leetcode&quot;
<strong>Output:</strong> &quot;tcode&quot;
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= s.length &lt;= 4 * 10<sup>5</sup></code></li>
	<li><code>s</code> contains only lowercase English letters.</li>
</ul>

class Solution:
    def lastSubstring(self, s: str) -> str:
        maxletter = s[0]
        for i in s:
            if i > maxletter:
                maxletter = i
        
        maxstr = ""
        for i in range(len(s)):
            if s[i] == maxletter:
                if s[i:len(s)] > maxstr:
                    maxstr = s[i:len(s)]
        return maxstr

        # def help(s):
        #     if not s:
        #         return ""
        #     if len(s) == 1:
        #         return s
        #     first = s[0]
        #     last = s[-1]
        #     wofirst = s[1:len(s)]
        #     wolast = s[0:len(s)-1]

        #     return max(s, first, last, wofirst, wolast, help(wofirst), help(wolast))

        # return help(s)

        # maxstr = ""
        # if not s:
        #     return ""
        # start = 0
        # end = 0

        # while end < len(s):
        #     if s[start:end+1] > maxstr:
        #         maxstr = s[start:end+1]
        #     if s[end] > s[start]:
        #         start = end
        #     end+=1
        # return maxstr
6807