回文分割

将一个很长的字符串,分割成一段一段的子字符串,子字符串都是回文字符串。
有回文字符串就输出最长的,没有回文就输出一个一个的字符。
例如:
habbafgh
输出h,abba,f,g,h。

bool isPalindrome(const string& str,string::size_type i, string::size_type j)//判断是否回文
{
    if(i>str.length() || i>j || j>str.length())
    {
        cout << "err!";
        return false;
    }
    for( ;i<j;i++,j--)
    {
        if(str[i] != str[j])
        {
            return false;
        }
    }
    return true;
}
void printAllMaxPalindrome(const string& str)
{
    string::size_type end=str.length();
    string::size_type i=0;
    for(string::size_type start=0 ; start<end; )
    {
        for(i=end-1 ; i>=start; )
        {
            if(str[start]==str[i] && isPalindrome(str,start,i))
            {
                for(string::size_type j=start ; j<=i; j++)
                {
                    cout << str[j];
                }
                cout <<",";
                break;
            }else{
                i--;
            }
        }//for
        start=i+1;
    }//for

}
int main()
{    
    string s="aaaaaaaa";
    //cout << isPalindrome(s,0,7);
    printAllMaxPalindrome("abcdfrfdabdfrrfdaaaaa");//
    system("pause");
    return 0;
}
posted @ 2012-09-29 14:36  logzh  阅读(544)  评论(0编辑  收藏  举报