<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(const string &s) {
        string longest = "";
        int current_size = 0;
        int left = 0,  right = 0;
        for (int i = 0; i < s.size(); ++i){
            left = i;
            right = i;
            checkPalingdrome(s, left, right);
            if(left >= 0 && right >= 0){
                current_size = right - left + 1;
                // std::cout <<  "size: " << current_size << std::endl;
                longest = (current_size  > longest.size()) ? s.substr(left, current_size): longest; 
            }

            left = i;
            right = i + 1;
            checkPalingdrome(s, left, right);
            if(left >= 0 && right >= 0){
                current_size = right - left + 1;
                // std::cout <<  "size: " << current_size << std::endl;
                longest = (current_size  > longest.size()) ? s.substr(left, current_size): longest; 
            }
            // std::cout<< odd << std::endl;
            // std::cout<< even << std::endl;
            
        } 
        // std::cout<< longest << std::endl;
        return longest;
    }

      void checkPalingdrome(const string &s, int &left, int &right){
        if (left < 0 || right >= s.size()){
            left = -1;
            right = -1;
            return ;
        }

        while(left >=  0 && right <= s.size() - 1 && s[left] == s[right]){
            // std::cout << "left: " << left  << " - right: " << right  <<std::endl;
            left--;
            right++;
            
        }
        // std::cout<<  s.substr(left + 1, right - left - 1) << std::endl;
        // return s.substr(left + 1, right - left - 1);
        // std::cout << "Palingdrome from " << left + 1 << " to " << right - 1 <<std::endl;
        left++;
        right--;
        // return "";
        
    }


};
59393