首页 > 其他分享 >#3. MOO字符串

#3. MOO字符串

时间:2024-03-27 21:59:15浏览次数:27  
标签:字符 int MOO && ans 字符串

题目描述

农夫约翰给了奶牛贝西 Q 个新字符串,其中只有字符 M 和 O ,她想将 Q 个字符串都变成 MOO。贝西可以用如下的方式改变字符串:

1.用相反的字符替换第一个或最后一个字符(将 M 变成 O ,将 O 变成 M )。 2.删除第一个或最后一个字符。

贝西只想用最少的次数完成改变。请你帮她找到需要的最小改变次数。如果不可能在有限的步数中完成这个任务,请输出 -1 。

输入格式

输入数据的第一行是一个正整数 Q 。(1≤Q≤100) 接下来的 Q 行中,每行一个只包含大写字母 M 或 O 的字符串 S ,保证 1≤∣S∣≤100 (∣S∣指字符串长度)。

输出格式

输出 Q 行,每行为该测试点最小操作次数,如果不可能在有限的步数中完成这个任务,请输出 -1 。

样例输入
3
MOMMOM
MMO
MOO
样例输出
4
-1
0
提示

将第一个字符串转换为 MOO的 4 个操作序列如下:

用O替换最后一个字符(操作1) 删除第一个字符(操作2) 删除第一个字符(操作2) 删除第一个字符(操作2)

可以证明,第二个字符串无法转换为 MOO。第三个字符串已经是 MOO,因此无需执行任何操作。

样例代码_有注释

#include<bits/stdc++.h>
using namespace std;

int T, ans;
char s[1010], t[1010];

int main(){
	scanf("%d", &T);
	while (T --) {
		ans = 100000;
		scanf("%s", s);
		if (strlen(s) < 3) {
			printf("-1\n");
			continue;
		}
		for (int i = 0; i < strlen(s) - 2; i ++) {
			t[0] = s[i]; t[1] = s[i+1]; t[2] = s[i+2]; // 截取连续的3个字符 
			if (t[0] == 'M' && t[1] == 'O' && t[2] == 'O') ans = strlen(s) - 3; // 存在MOO,只需删除多余部分 
			else if (t[0] == 'M' && t[1] == 'O' && t[2] == 'M') ans = min(ans, (int)(strlen(s) - 2));// MOM, 删除多余之后还需要1步操作
			else if (t[0] == 'O' && t[1] == 'O' && t[2] == 'O') ans = min(ans, (int)(strlen(s) - 2));// OOO, 删除多余之后还需要1步操作 
			else if (t[0] == 'O' && t[1] == 'O' && t[2] == 'M') ans = min(ans, (int)(strlen(s) - 1));// OOM, 删除多余之后还需要2步操作 
		}
		if (ans == 100000) ans = -1; // 没有找到一个可变化的3个连续的字符 
		printf("%d\n", ans);
	}
	return 0;
}

标签:字符,int,MOO,&&,ans,字符串
From: https://blog.csdn.net/2301_76966569/article/details/137090992

相关文章

  • 2024-03-27:用go语言,多维费用背包。 给你一个二进制字符串数组 strs 和两个整数 m 和 n
    2024-03-27:用go语言,多维费用背包。给你一个二进制字符串数组strs和两个整数m和n,请你找出并返回strs的最大子集的长度,该子集中最多有m个0和n个1。如果x的所有元素也是y的元素,集合x是集合y的子集。输入:strs=["10","0001","111001","1","0"],m=......
  • 16使用正则表达式处理字符串
    1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"content="width=device-width,initial-scale=1.0">6<title>Document......
  • 如何打乱字符串中的内容
    importjava.util.Random;importjava.util.Scanner;publicclassdaluan{publicstaticvoidmain(String[]args){//键盘输入任意字符串,打乱里面的内容//1。键盘录入字符串Scannersc=newScanner(System.in);Stringstr=s......
  • Python学习——例题详解1、字符串简单加密和解密
    1、加密原理    基于按位异或(^),对字符串进行简单的加密算法原理:ord('A')^ord('P')#加密,运算结果:17chr(17^ord('p'))#解密,运算结果:‘A’2、例题    给定字符串text作为明文(要加密的原文,同上述A)和key作为密钥(同上述P),使用按位异或循环处理text的每一个......
  • python-列表、元组、字符串、集合、字典等用法
    目录1.列表(list)1.1  列表的定义语法1.2  列表的下标索引1.3  列表的常用操作1.4  列表的循环遍历示例2.元组(tuple)3.字符串4.数据容器(序列)的切片4.2序列切片课后练习5.集合(set)5.1  集合的操作方法6.字典(dict)7.容器排序,排序之后会变成列表对象1.......
  • 链式栈回文字符串的判断(C++版)
    大家好我是大一新生,如果代码有啥错误和改进的地方可以评论哦,谢谢观念看;#include<iostream>#include<iomanip>usingnamespacestd;#defineok1#defineerror0#defineSelemtypechar#defineStatusint#defineMAXSIZE100typedefstructstack{//链式栈的结构  ......
  • pat mooc 浙江大学数据结构 01-复杂度1 最大子列和问题
    输入格式:输入第1行给出正整数K(≤100000);第2行给出K个整数,其间以空格分隔。输出格式:在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。输入样例:6-211-413-5-2输出样例:20#include<stdio.h>intmain(){ intk,n; intsum=0; intm......
  • react零基础到精通-1|基础概念,主要特性,s6语法,react相关的开发环境和工具,react简介,箭头
    致力于解决复杂视图层开发我呢提,全新的ui组件的开发理念,1.1React简介前端UI的本质问题是如何将来源于服务器端的动态数据和用户的交互行为高效地反映到复杂的用户界面上。React另辟蹊径,通过引入虚拟DOM、状态、单向数据流等设计理念,形成以组件为核心,用组件搭建UI的开发......
  • 字符函数与字符串函数
    欢迎各位来指点我的博客哦!主页:趋早–Step专栏:C语言gitte网站:https://gitee.com/good-thg文章目录一、字符分类函数例题一例题二二、字符转换函数三、字符串函数1.strlen(1)strlen函数的使用(2)strlen函数的模拟实现计数器方式实现递归方式(不创建临时变量)指针-指针......
  • Linux系列之统计某个字符串出现次数并排序
    业务场景最近遇到一个流量异常调用的接口,所以需要通过后台日志查看接口调用情况,先统计今天内接口的调用次数,再具体到对应的设备号,就知道哪台设备有问题了,初步想到wc和awk命令来筛选统计,但是真正去写的时候,发现很多写法都不太记得了,所以花了点时间去查手册,找资料,现在整理成......