#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int ans=0;
int len=s.size();
if(len==1)cout<<0;
else
{
vector<vector<int>> dp(len,vector<int>(len));
int mid=len/2;
int l=mid-1,r=mid+1;
while(l>=0)
{
for(int i=l+1;i<r;i++)
{
if(i-l==1)
{
if(s[i]<s[l]){ans++;dp[l][i]=1;}
}
else
{
if(s[i]<s[l]||(s[i]==s[l]&&dp[l+1][i-1]==1)){ans++;dp[l][i]=1;}
}
}
l--;
}
while(r<len)
{
for(int i=r-1;i>=0;i--)
{
if(r-i==1)
{
if(s[r]<s[i]){ans++;dp[i][r]=1;}
}
else
{
if(s[r]<s[i]||(s[i]==s[r]&&dp[i+1][r-1]==1)){ans++;dp[i][r]=1;}
}
}
r++;
}
cout<<ans;
}
return 0;
}
算法:更小的数(蓝桥杯真题)
于 2024-03-01 19:55:27 首次发布