首页 > 其他 > 详细

【美团杯2020】查查查乐乐

时间:2020-05-19 23:34:36      阅读:69      评论:0      收藏:0      [点我收藏+]

题目链接

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e2+5, inf = 0x3f3f3f3f;
// dp[i][l]
// 对前i个字符进行修改,使得l的值等于 xxxll与修改后的字符串的最长公共前缀的长度 的最小值
// dp[i][0],对原串前i个字符进行修改,使得xxxll与修改后的字符串的最长公共前缀的长度为0
// dp[i][1],对原串前i个字符进行修改,使得xxxll与修改后的字符串的最长公共前缀的长度为1
// dp[i][2],对原串前i个字符进行修改,使得xxxll与修改后的字符串的最长公共前缀的长度为2
// dp[i][3],对原串前i个字符进行修改,使得xxxll与修改后的字符串的最长公共前缀的长度为3
// dp[i][4],对原串前i个字符进行修改,使得xxxll与修改后的字符串的最长公共前缀的长度为4
int dp[maxn][5];
char s[maxn];
int main() {
    int t; scanf("%d",&t);
    while (t--) {
        memset(dp,inf,sizeof(dp));
        scanf("%s",s+1);
        int len = strlen(s+1);
        dp[0][0] = 0;
        for (int i = 1; i <= len; ++i) {
            dp[i][0] = dp[i-1][0] + (s[i] == ‘x‘);
            dp[i][1] = min(dp[i-1][0] + (s[i] != ‘x‘), dp[i-1][1] + (s[i] == ‘x‘));  // x
            dp[i][2] = min(dp[i-1][1] + (s[i] != ‘x‘), dp[i-1][2] + (s[i] == ‘x‘));  // xx
            dp[i][3] = min(dp[i-1][2] + (s[i] != ‘x‘), dp[i-1][3] + (s[i] == ‘l‘));  // xxx
            dp[i][4] = min(dp[i-1][3] + (s[i] != ‘l‘), dp[i-1][4] + (s[i] == ‘l‘));  // xxxl
        }
        int ans = inf;
        for (int i = 0; i < 5; ++i) ans = min(ans,dp[len][i]);
        printf("%d\n",ans);
    }
    return 0;
}

【美团杯2020】查查查乐乐

原文:https://www.cnblogs.com/wstong/p/12920084.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!