➤ Problem Link : 219C. Color Stripe
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; int dp[500002][28]; void printVal(int n,int t,int k) { if(n==0) return; int ans=INT_MAX; int v; for(int i=0;i<k;i++) { if(i==t) continue; if(dp[n-1][i] < ans) { ans=dp[n-1][i]; v=i; } } printVal(n-1,v,k); char c = 'A'+v; cout<<c; } int main() { int n,k; cin>>n>>k; string s; cin>>s; if(n==1) { cout<<"0\n"; cout<<s; exit(0); } for(int i=0;i<k;i++) dp[0][i]=1; dp[0][s[0]-'A']=0; int ans=INT_MAX; for(int i=1;i<n;i++) { for(int j=0;j<k;j++) { int mn=INT_MAX; for(int m=0;m<k;m++) if(m!=j) mn=min(mn,dp[i-1][m]); if(s[i]-'A'==j) dp[i][j]=mn; else dp[i][j]=mn+1; if(i==n-1) ans=min(ans,dp[i][j]); } } cout<<ans<<endl; printVal(n,-1,k); }
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!