80分求助感谢
查看原帖
80分求助感谢
1064275
kmltz楼主2024/3/13 20:51
using namespace std;
#include<bits/stdc++.h>
#define ll long long
ll read(){
   ll summ=0;ll f=1;char ch;
   ch=getchar();
   while(ch<'0'||ch>'9'){
	   if(ch=='-'){
		   f=-1;
	   }
	   ch=getchar();
   
   }
   while(ch>='0'&&ch<='9'){
	   summ=summ*10+ch-'0';
	   ch=getchar();
   
   }
   return f*summ;

}
string a;
ll f[100][100];ll cnt=0;

int main(){
	cin>>a;
	ll lena=a.size();
	a='-'+a;
	memset(f,0x3f,sizeof(f));
	for(int i=1;i<=lena;i++){
		f[i][i]=1;
		if(i!=lena){
		
			if(a[i]==a[i+1]){
				f[i][i+1]=1;
				
			}else{
				f[i][i+1]=2;
			}
		}
	}
	for(int len=3;len<=lena;len++){
		for(int l=1;l+len-1<=lena;l++){
			ll r=l+len-1;
			
				ll cn=0;
				if(a[l]==a[l+1]&& a[r-1]==a[r]){//首尾和它前一个后一个分别相等 
					f[l][r]=min(f[l][r],f[l+1][r-1]);
//					cout<<l<<"--"<<r<<"--1--"<<f[l][r]<<endl;
				}else if(a[l]==a[r]){//首尾相等 
					
					f[l][r]=min(f[l][r],f[l+1][r-1]+1);
//					cout<<l<<"--"<<r<<"--11--"<<f[l][r]<<endl;
				}else f[l][r]=min(f[l][r],f[l+1][r-1]+2);
//									cout<<l<<"--"<<r<<"--111--"<<f[l][r]<<endl;

				if(a[l]==a[l+1]||a[l]==a[r]){
					f[l][r]=min(f[l][r],f[l+1][r]);
				}else f[l][r]=min(f[l][r],f[l+1][r]+1);
				if(a[r]==a[r-1]||a[r]==a[l]){
					f[l][r]=min(f[l][r],f[l][r-1]);
					
				}else f[l][r]=min(f[l][r],f[l][r-1]+1);
			
		}
	}
	cout<<f[1][lena];
	return 0;
}
2024/3/13 20:51
加载中...