题目链接
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e2+5, inf = 0x3f3f3f3f;
// dp[i][l],对原串前i个字符进行修改,使得xxxll与修改后的字符串的最长公共前缀的长度为l
// 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;
}