CodeForces-858#C 题解

发布时间 2023-04-29 16:41:37作者: IOIAK_wanguan

正文

最坏时间复杂度:\(\mathcal{O}(\lvert S\rvert)\)

本题十分简单,但请注意两个条件要同时满足

因为要求分割的次数越少越好,所以只要连续的辅音字母长度不大于 2 就不需要分割。

由于辅音字母太多,只需要标记元音字母即可。

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
bool yuan[505];//记录元音字母
int cnt;//记录连续辅音个数
string s;
int main(){
  ios::sync_with_stdio(false),cin.tie(0);
  yuan['a']=yuan['i']=yuan['u']
    =yuan['o']=yuan['e']=1;//记录元音字母
  cin>>s;
  for(int i=0;i<s.size();i++){
    if(!yuan[s[i]]) cnt++;//如果是辅音字母,将cnt加1
    else cnt=0;//如果是元音字母,将累计的cnt归零
    if(cnt>=3&&(s[i]!=s[i-1]||s[i]!=s[i-2]))
      cout<<" ",cnt=1;//如果两个条件都满足了,分割
    cout<<s[i];
  }
}

完结!!

后附

日志

v1.0 on 2023.04.29: 发布