CF858C 题解

洛谷链接&CF 链接

本篇题解为此题较简单做法较少码量,并且码风优良,请放心阅读。

1|0题目简述

给你一个均为小写字母的字符串,如果它的子串同时满足:

  1. 三个连着的辅音字母。

  2. 这一段连着的辅音字母不是全部一样的。

就认为它不合法。

现在要求用最少的空格隔开这个字符串,使得它变成合法的。

2|0思路

首先定义记录当前位置是否是元音字母的数组 a,并维护它,如下:

for(int i = 0; i < n; i ++) { bool flag = false; for(int j = 0; j < 5; j ++) if(str[i] == c[j]) flag = true; a[i] = flag; }

接着直接根据题目要求模拟即可,定义 num 记录当前连续辅音字母的个数,当这个个数 3 之后输出空格即可,这里需要注意:需要先输出空格再输出字母!

经过以上分析及代码片段,很容易即可写出代码了:

#include<iostream> using namespace std; char c[10] = {'a', 'e', 'i', 'o', 'u'}; // 元音字母数组 string str; bool a[3005]; // 记录是否是元音字母 int main(){ cin >> str; int n = str.length(); // 预处理 a 数组 for(int i = 0; i < n; i ++) { bool flag = false; for(int j = 0; j < 5; j ++) if(str[i] == c[j]) flag = true; a[i] = flag; } int num = !a[0]; // 初始化 num cout << str[0]; // 先输出第一个字母 for(int i = 1; i < n; i ++) { // 如果是辅音字母 if(!a[i]) { num ++; // 增加计数 if(num >= 3 && !(str[i - 2] == str[i] && str[i - 1] == str[i])) { cout << ' '; // 满足条件输出空格 num = 1; // num 初始化 } } else num = 0; // 元音字母 cout << str[i]; // 正常输出 } return 0; }

提交记录

The End!


__EOF__

本文作者So_noSlack
本文链接https://www.cnblogs.com/So-noSlack/p/17589325.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   So_noSlack  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示