給定一個字符串s,你可以從中刪除一些字符,使得剩下的串是一個回文串。如何刪除才能使得回文串最長呢? 輸出需要刪除的字符個數。


// ConsoleApplication1.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
#include<iostream>
#include<vector>
#include <algorithm>  
#include<iomanip>
#include<string>

using namespace std;

int getStr(string str1, string str2)
{
	string str;
	int m = str1.size();
	int n = str2.size();
	vector<vector<int>> vec(m+1, vector<int>(n+1, 0));
	for (int i = 1; i <= m; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			if (str1[i-1] == str2[j-1]) //這里注意是i-1 和j-1相比較
			{
				vec[i][j] = vec[i - 1][j - 1] + 1;
		
			}
			else
			{
				vec[i][j] = max(vec[i-1][j], vec[i][j-1]);
			}
		}
	}

	return vec[m][n];
}

int main()
{



		
	string str1;
	while (cin>>str1)
	{
		string str2 = str1;
		reverse(str1.begin(),str1.end());
		cout << "str1:" << str1 << endl;
		cout << "str2:" << str2 << endl;
		cout << str1.size() - getStr(str1, str2) << endl;
	}

		
		
		
	

	


	
	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM