<p>Given a string <code>s</code>, find the length of the <strong>longest</strong> <span data-keyword="substring-nonempty"><strong>substring</strong></span> without repeating characters.</p>

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

<pre>
<strong>Input:</strong> s = &quot;abcabcbb&quot;
<strong>Output:</strong> 3
<strong>Explanation:</strong> The answer is &quot;abc&quot;, with the length of 3.
</pre>

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

<pre>
<strong>Input:</strong> s = &quot;bbbbb&quot;
<strong>Output:</strong> 1
<strong>Explanation:</strong> The answer is &quot;b&quot;, with the length of 1.
</pre>

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

<pre>
<strong>Input:</strong> s = &quot;pwwkew&quot;
<strong>Output:</strong> 3
<strong>Explanation:</strong> The answer is &quot;wke&quot;, with the length of 3.
Notice that the answer must be a substring, &quot;pwke&quot; is a subsequence and not a substring.
</pre>

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

<ul>
	<li><code>0 &lt;= s.length &lt;= 5 * 10<sup>4</sup></code></li>
	<li><code>s</code> consists of English letters, digits, symbols and spaces.</li>
</ul>

class Solution {
public:
    int allSame(string s) {
        /*for (int i=0; i<s.size(); i++) {
            if (i<s.size()-1 && s[i] != s[i+1]) {
                return 0;
            }
        }*/
        set<char>x(s.begin(), s.end());
        if (x.size() == 1) {
            return 1;
        }
        return 0;
    }
    bool allDiff(string s) {
        set<char>x(s.begin(), s.end());
        if (x.size() == s.size()) {
            return true;
        }
        return false;
    }
    int lengthOfLongestSubstring(string s) {
        if (s.empty()) { return 0; }
        if (s.size() == 1) { return 1; }
        if (allSame(s)) { return 1; }
        int maxs=0;
        string t = "";
        set<char>noDup(s.begin(), s.end());
        bool exitFlag = 0;
        for (int i=0; i<s.size(); i++) {
            for (int j=i; j<s.size(); j++) {
                t += s[j];
                if (allDiff(t)) {
                    if (maxs < t.size()) {
                        maxs = t.size();
                    }
                }
                else {
                    if (noDup.size()+1 == t.size()) {
                        exitFlag = 1;
                    }
                    t = "";
                    break;
                }
            }
            if (exitFlag) {
                break;
            }
        }
        return maxs;
    }
};
129049