因为贝茜厌倦了玩她通常的文本字符串,其中唯一的 字符是“C”,“O”和“W”,农夫约翰给她Q
新字符串 (1≤Q≤100
),其中唯一的字符是“M”和“O”。 在字符“M”和“O”中最喜欢的词显然是“MOO”,所以她想要 以将每个Q
使用以下操作将字符串放入“MOO”中:
将第一个或最后一个字符替换为其相反的字符(以便“M” 变为“O”,“O”变为“M”)。
删除第一个或最后一个字符。
不幸的是,贝西很懒惰,不想执行比 绝对必要。对于每个字符串,请帮助她确定最小值 形成“MOO”或输出所需的操作数−1
如果这是 不可能的。
输入格式(输入从终端/标准到达):
输入的第一行包含的值Q
.
下一个Q
每行输入由一个字符串组成,每个字符串都包含其字符 “M”或“O”。每个字符串至少包含 1 个字符,最多包含 100 个字符。
输出格式(打印输出到终端/标准输出):
在单独的行上输出每个输入字符串的答案。
示例输入:
3
MOMMOM
MMO
MOO
示例输出:
4
-1
0
一系列4
将第一个字符串转换为“MOO”的操作为 遵循:
Replace the last character with O (operation 1)
Delete the first character (operation 2)
Delete the first character (operation 2)
Delete the first character (operation 2)
第二个字符串不能转换为“MOO”。第三个字符串已经 “MOO”,因此无需执行任何操作。
仅供参考,代码如下:
#include <bits/stdc++.h>
using namespace std;
int n, m, cnt;
char s[105];
int main()
{
cin >> n;
while (n--)
{
cin >> (s + 1);
m = strlen(s + 1);
cnt = 0;
for (int i = 1; i <= m; i++)
{
if (s[i] == 'O')
cnt++;
}
if (cnt % 2 == 0)
cout << m / 2 - 1 << endl;
else
cout << -1 << endl;
}
return 0;
}
回答不易,求求您采纳点赞哦
以下是用 C++ 解决这个问题的代码,仅是参考:
#include<bits/stdc++.h>
using namespace std;
int t, n;
char a[105];
int main()
{
cin >> t;
while(t--)
{
cin >> a;
n = strlen(a);
int l = 0, r = n - 1, sum = 0;
while(l <= r)
{
if(a[l] == 'M' && a[r] == 'O')
sum++, l++, r--;
else if(a[l] == 'O')
sum++, r--;
else if(a[r] == 'O')
sum++, l++;
else
break;
}
if(sum >= 2)
cout << (sum - 2) / 2 << endl;
else
cout << -1 << endl;
}
return 0;
}
这是一道题目,要求对于输入的Q个字符串,求出使其变为“MOO”所需的最少操作数。字符串只包含“M”和“O”两种字符。每次操作可以将字符串的第一个字符或最后一个字符替换为其相反的字符,也可以删除第一个字符或最后一个字符。要求结果的操作数减1后的值。
如果不能变成“MOO”,则输出-1。
不知道你这个问题是否已经解决, 如果还没有解决的话: