<p>Given a string <code>s</code>, return <em>the longest</em> <span data-keyword="palindromic-string"><em>palindromic</em></span> <span data-keyword="substring-nonempty"><em>substring</em></span> in <code>s</code>.</p>

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

<pre>
<strong>Input:</strong> s = &quot;babad&quot;
<strong>Output:</strong> &quot;bab&quot;
<strong>Explanation:</strong> &quot;aba&quot; is also a valid answer.
</pre>

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

<pre>
<strong>Input:</strong> s = &quot;cbbd&quot;
<strong>Output:</strong> &quot;bb&quot;
</pre>

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

<ul>
	<li><code>1 &lt;= s.length &lt;= 1000</code></li>
	<li><code>s</code> consist of only digits and English letters.</li>
</ul>

class Solution {
public:
    string longestPalindrome(string s) {
        int n = s.size();

        string ans = "";
        int Mx = 0;
        for(int i = 0; i < n; i++){ 
            // case 1 : odd length
            // choose current ele as middle
            int l = i-1;
            int r = i+1;
            int ct = 1;
            string temp = "";
            temp += s[i];
            int lw = i;
            while(l >= 0 and r < n){
                if(s[l] == s[r]){
                    lw = l;
                    temp += s[l];
                    temp += s[l];
                    l--;
                    r++;
                    ct += 2;
                }
                else break;
            }
            // cout <<"lw " << lw << endl;
            temp = s.substr(lw,ct);
            // cout << "ct " << ct << " " << temp << endl;
            if(ct > Mx){
                Mx = ct;
                ans = temp;
            }

            // case 1 : even length
            int l1 = i;
            int r1 = i+1;
            int ct1 = 0;
            int lw1 = -1;
            string temp1 = "";
            while(l1 >= 0 and r1 < n){
                if(s[l1] == s[r1]){
                    lw1 = l1;
                    temp1 += s[l1];
                    temp1 += s[l1];
                    l1--;
                    r1++;
                    ct1 += 2;
                }
                else break;
            }
            if(lw1 == -1) continue;

            // cout <<"lw1 " << lw1 << endl;
            temp1 = s.substr(lw1,ct1);
            // cout << "ct1 " << ct1 << " " << temp1 << endl;
            if(ct1 > Mx){
                Mx = ct1;
                ans = temp1;
            }
        }
        return ans;
    }
};
47300