10. 肥宅快乐串

目录

题目

 思路

注意事项

C++代码


题目

Description
龙龙在研究字符串和字符串处理。龙龙发现有一些字符串让他第一眼看到就会发自内心的感到快乐,他把这些字符串称为“肥宅快乐串"。龙龙进一步研究发现,一个字符串是"肥宅快乐串",当且仅当这个字符串存在至少一个子串是"fattyhappy"。字符串的子串是指这个字符串中截下来的连续的一段。比如"fffffattyhappyyyyy"就有一个"fattyhappy"子串,而"faaaaattyhappy"就没有一个"fattyhappy"子串。现在龙龙看到了好多个字符串,他想对每一个字符串交换恰好一对字符的位置,使得这个字符串变成"肥宅快乐串"。请注意:必须进行一次交换,不允许不交换。龙龙真的很想见到"肥宅快乐串",请你帮帮龙龙吧,告诉他应该交换字符串里哪两个位置的字符。
Input
输入共有  行,其中  表示需要你进行操作的字符串个数;
第一行一个正整数;
接下来第  到第  行,每行输入一个字符串,表示需要你帮忙变成"肥宅快乐串"的原来的字符串,一共有  行。
Output
输出  行,表示这  个字符串的交换方案。对于每个字符串,如果有解,输出两个数 ,表示交换字符串的第  个和第  个字符。否则输出一个数 ,表示没有方案。如果有多种方法使得它变成"肥宅快乐串",输出任意一种即可。
Note
所有数据保证 。即单个字符串长度不超过 ,所有字符串总长度不超过 。保证字符串中只有小写字母出现。

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 5↵
  2. fafttyhappy↵
  3. fiftyhappy↵
  4. fattyahppy↵
  5. fattypahpy↵
  6. pattyhafpy↵
以文本方式显示
  1. 2 3↵
  2. -1↵
  3. 6 7↵
  4. 6 8↵
  5. 1 8↵
1秒64M0

 思路

  • 用两个for循环嵌套比较每一次输入的连续字符串子串和"fattyhappy",用count记录字母数;
    若count==0,即找寻到与"fattyhappy"一致的连续子串,直接交换内部两个t即可;
    若count==1,即找寻到的连续子串相差一个字母,则从其他位置搜寻正确的字母与其交换;若count==2,即相差两个字母,需检查两者交换后能否成为"fattyhappy";
    若count>2,可以直接跳出内循环,从下一个字母开始搜索。
  •  重复以上两步,直到找到符合要求的交换或搜寻结束为止。

注意事项

  1. 用count记录不同字符数,index1和index2记录当前不一样字符在字符串中的下标,ch1和ch2记录在肥宅快乐串中需要的字符,flag作为是否已经找到子串的标志。记得在合适位置初始化。
  2. for的外循环i的边界至少是s.size()-9,即i至少得遍历到倒数第十个数。
  3. 注意索引下标与位置的区别,位置=索引下标+1
  4. 当count为2时,应判断s[index1] == ch2 && s[index2] == ch1是否成立,而不是判断ch1==ch2是否成立
  5. 只需要一组答案,因此得到结果后就可以break

C++代码

#include<iostream>
#include<string>
using namespace std;int main()
{int T, count = 0;string str = "fattyhappy";cin >> T;while (T--){string s;cin >> s;int flag = 0;//flag作为可否得到肥宅快乐串的标志符for (int i = 0; i < s.size() - 9; i++){//记得每次循环要初始化int count = 0, index1, index2;char ch1, ch2;for (int j = 0; j < 10; j++) //对每一个i往后遍历找十个字符与肥宅快乐串对应字符作比较   if (s[i + j] != str[j]) {//出现不一样的字符if (count == 0){ch1 = str[j]; //存取需要的字符  index1 = i + j; //记录原来的字符位置   count++;}else if (count == 1){count++;ch2 = str[j];//存取需要的字符index2 = i + j; //记录原来的字符位置   }else if (count > 1)count++;}if (count == 0) //无不同则在原本字符串内交换   {cout << i + 4 << " " << i + 3 << endl; //此时的i即为fattyhappy的第一个字符   flag = 1;break;}else if (count == 1) //一个不同,从10个之外的字符里找符合要求的   {for (int k = 0; k < s.size(); k++){if (k == i){k += 10; continue;}if (s[k] == ch1){cout << k + 1 << " " << index1 + 1 << endl;flag = 1;break;}}if (flag == 1) break;}else if (count == 2) //两个不同,如果彼此交换得到肥宅快乐串即可   {if ({cout << index1 + 1 << " " << index2 + 1 << endl;flag = 1;break;}}else continue; //不同字符大于2,怎样更换都无法满足条件 ,继续寻找   }if (flag == 0) cout << -1 << endl; //遍历了整个字符串字串依然没有找到符合的情况 }return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/56312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongTemplate实现group分组查询aggregation

MongoService封装 <T> List<T> group(Class<T> clazz, Aggregation aggregation,String documentName); MongoServiceImpl实现类 Overridepublic <T> List<T> group(Class<T> clazz, Aggregation aggregation,String documentName) {//…

设计模式二十二:策略模式(Strategy Pattern)

定义一系列算法&#xff0c;将每个算法封装成独立的对象&#xff0c;并使这些对象可互相替换。这使得在运行时可以动态地选择算法&#xff0c;而不必改变使用算法的客户端代码。策略模式的主要目标是将算法的定义与使用分离&#xff0c;使得客户端可以根据需要灵活地选择和切换…

linux中互斥锁,自旋锁,条件变量,信号量,与freeRTOS中的消息队列,信号量,互斥量,事件的区别

RTOS 对于目前主流的RTOS的任务&#xff0c;大部分都属于并发的线程。 因为MCU上的资源每个任务都是共享的&#xff0c;可以认为是单进程多线程模型。 【freertos】003-任务基础知识 在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式&#xff0c;但是如…

“Go程序员面试笔试宝典”复习便签

一.逃逸分析 1.1逃逸分析是什么&#xff1f; 逃逸分析&#xff0c;主要是Go编译器用来决定变量分配在堆或者栈的手段。 区分于C/C手动管理内存分配&#xff0c;Go将这些工作交给了编译器。 1.2逃逸分析有什么作用 解放程序员。程序员不需要手动指定指针分配内存。 灵活的…

基于Java+SpringBoot+Vue前后端分离社区医院管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

优化Python代理爬虫的应用

当我们在资源受限的环境中使用Python代理爬虫时&#xff0c;我们需要采取一些优化措施&#xff0c;以确保程序的高效性和稳定性。在本文中&#xff0c;我将分享一些关于如何优化Python代理爬虫在资源受限环境下的应用的实用技巧。 首先我们来了解&#xff0c;哪些情况算是资源…

【位运算进阶之----右移(>>)】

&#x1f604;嘻嘻&#xff0c;朋友们&#xff0c;大家好&#xff01;昨天我们学习了左移&#xff0c;今天我们来谈谈右移>>。 ⭐️简单来说&#xff0c;右移就是将一个数二进制表达整体向右移动&#xff0c;也就是去掉一个数的二进制表达的末位&#xff0c;右移一位就去…

HarmonyOS/OpenHarmony(Stage模型)卡片开发AbilityStage组件容器

AbilityStage是一个Module级别的组件容器&#xff0c;应用的HAP在首次加载时会创建一个AbilityStage实例&#xff0c;可以对该Module进行初始化等操作。 AbilityStage与Module一一对应&#xff0c;即一个Module拥有一个AbilityStage。 DevEco Studio默认工程中未自动生成Abilit…

Kaniko在containerd中无特权快速构建并推送容器镜像

目录 一、kaniko是什么 二、kaniko工作原理 三、kanijo工作在Containerd上 基于serverless的考虑&#xff0c;我们选择了kaniko作为镜像打包工具&#xff0c;它是google提供了一种不需要特权就可以构建的docker镜像构建工具。 一、kaniko是什么 kaniko 是一种在容器或 Kube…

字符集(Latin1,GBK,utf8,utf8mb4)

Latin1 1个字符占一个字节GBK 1个字符占两个字节utf8utfmb3 1个字节占三个字节utf8mb4 1个字符占四个字节

前端(十五)——GitHub开源一个react封装的图片预览组件

&#x1f475;博主&#xff1a;小猫娃来啦 &#x1f475;文章核心&#xff1a;GitHub开源一个react封装的图片预览组件 文章目录 组件开源代码下载地址运行效果展示实现思路使用思路和api实现的功能数据和入口部分代码展示 组件开源代码下载地址 Gitee&#xff1a;点此跳转下载…

Java入职第十一天,深入了解静态代理和动态代理(jdk、cglib)

一、代理模式 一个类代表另一个类去完成扩展功能,在主体类的基础上,新增一个代理类,扩展主体类功能,不影响主体,完成额外功能。比如买车票,可以去代理点买,不用去火车站,主要包括静态代理和动态代理两种模式。 代理类中包含了主体类 二、静态代理 无法根据业务扩展,…

C++Qt堆叠窗体的使用案例

本博文源于笔者最近学习的Qt&#xff0c;内容讲解堆叠窗体QStackedWidget案例&#xff0c;效果是选择左侧列表框中不同的选项时&#xff0c;右侧显示所选的不同的窗体。 案例效果 案例书写过程 控件都是动态创建的&#xff0c;因此.h文件需要创建控件&#xff0c;.cpp书写业务…

Mysql--技术文档--悲观锁、乐观锁-《控制并发机制简单认知、深度理解》

阿丹&#xff1a; 首先在谈到并发控制机制的时候&#xff0c;我们通常会提及两种重要的锁策略。悲观锁&#xff08;Pessimistic Locking&#xff09;和乐观锁&#xff08;Optimistic Locking&#xff09;。这两个是在处理并发的时候采取的不同思路。 悲观锁&#xff1a; 悲观锁…

四层负载均衡的NAT模型与DR模型推导 | 京东物流技术团队

导读 本文首先讲述四层负载均衡技术的特点&#xff0c;然后通过提问的方式推导出四层负载均衡器的NAT模型和DR模型的工作原理。通过本文可以了解到四层负载均衡的技术特点、NAT模型和DR模型的工作原理、以及NAT模型和DR模型的优缺点。读者可以重点关注NAT模型到DR模型演进的原…

php灵异事件,啥都没干数据变了?

这篇文章也可以在我的博客查看 搞WordPress&#xff0c;难免跟php打交道 然而这弱类型语言实在坑有点多 这不今儿又踩了个大坑直接时间-1&#x1f605; 问题 话不多说直接上代码 <?php $items [1,2];foreach ($items as &$item) {/*empty loop*/} print_r($items)…

vue table合并行 动态列名

需求: 1.合并行,相同数据合并 2,根据后端返回数据动态显示列名, 我这个业务需求是,每年增加一列,也就是列名不是固定的,后端返回数据每年会多一条数据,根据返回数据显示列名 实现: html <el-table v-loading"loading" :data"dataList" :span-metho…

视频汇聚平台EasyCVR安防视频监控平台新增经纬度选取功能的详细介绍

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

ios ipa包上传需要什么工具

目录 ios ipa包上传需要什么工具 前言 一、IPA包的原理 二、IPA包上传的步骤 1.注册开发者账号 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包IPA包 6.上传IPA包 三、总结 前言 iOS IPA包是iOS应用程序的安装包&#xff0c;可以通过iT…

12. Oracle中case when详解

格式&#xff1a; case expression when condition_01 then result_01 when condition_02 then result_02 ...... when condition_n then result_n else result_default end 表达式expression符合条件condition_01&#xff0c;则返回…