迴文字串

brucehb發表於2017-04-13
迴文串是指aba、abba、cccbccc、aaaa這種左右對稱的字串。每個字串都可以通過向中間新增一些字元,使之變為迴文字串。
例如:abbc 新增2個字元可以變為 acbbca,也可以新增3個變為 abbcbba。方案1只需要新增2個字元,是所有方案中新增字元數量最少的。

#include <iostream>
using namespace std;

int fun(string &input)
{
    int n = input.length();
    int dp[n][n];
    
    for (int i = 0; i < n; i++)
    {
        dp[i][i] = 0;
    }
    for (int j = 1; j < n; j++)
    {
        for (int i = j-1; i >= 0; i--)
        {
			if (i == j-1)
            {
                if (input[i] == input[j])
                {
                    dp[i][j] = 0;
                }
                else
                {
                    dp[i][j] = 1;
                }
            }
            else
            {
				if (input[i] == input[j])
				{
					dp[i][j] = dp[i+1][j-1];
				}
				else
				{
					dp[i][j] = min(dp[i][j-1], dp[i+1][j]) + 1;
				}
            }
        }
    }
    
    return dp[0][n-1];
}

int main()
{
    string input;
    cin >> input;
    cout << fun(input) << endl;
    
    return 0;
}


相關文章