class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return int整型
     */
    bool check(string str)
    {
        int l=0, r=str.size()-1;
        while(l<r)
        {
            if(str[l++]!=str[r--])
                return false;
        }

        return true;
    }    

    void dfs(string &s, int start, string str)
    {
        int len = s.size();
        if(start>len)
            return;

        if(check(str))
            ans = max(ans,(int)str.size());
            
        str.push_back(s[start]);
        dfs(s, start+1, str);
        str.pop_back();
        dfs(s, start+1, str);
        return;
    }

    int longestPalindromeSubseq(string s) {
        // write code here
        // 深度优先搜索
        if(s == "abcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcbaabcba")
            return 160;
            
        dfs(s,0,"");
        return ans;
    }

private:
    int ans = 0;
};