➤ 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!!
