classSolution{public:intstrangePrinter(strings){constintn=s.length();// dp[i][j] := min # of turns to print s[i..j]dp.resize(n,vector<int>(n));returnstrangePrinter(s,0,n-1);}private:vector<vector<int>>dp;intstrangePrinter(conststring&s,inti,intj){if(i>j)return0;if(dp[i][j])returndp[i][j];// Print s[i]dp[i][j]=strangePrinter(s,i+1,j)+1;for(intk=i+1;k<=j;++k)if(s[k]==s[i])dp[i][j]=min(dp[i][j],strangePrinter(s,i,k-1)+strangePrinter(s,k+1,j));returndp[i][j];}};
classSolution{publicintstrangePrinter(Strings){finalintn=s.length();// dp[i][j] := min # of turns to print s[i..j]dp=newint[n][n];returnstrangePrinter(s,0,n-1);}privateint[][]dp;privateintstrangePrinter(finalStrings,inti,intj){if(i>j)return0;if(dp[i][j]>0)returndp[i][j];// Print s[i]dp[i][j]=strangePrinter(s,i+1,j)+1;for(intk=i+1;k<=j;++k)if(s.charAt(k)==s.charAt(i))dp[i][j]=Math.min(dp[i][j],strangePrinter(s,i,k-1)+strangePrinter(s,k+1,j));returndp[i][j];}}
classSolution{public:intstrangePrinter(strings){if(s.empty())return0;constintn=s.size();// dp[i][j] := min # of turns to print s[i..j]vector<vector<int>>dp(n,vector<int>(n,n));for(inti=0;i<n;++i)dp[i][i]=1;for(intj=0;j<n;++j)for(inti=j;i>=0;--i)for(intk=i;k<j;++k)dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]-(s[k]==s[j]));returndp[0][n-1];}};