Victor tries to write his own text editor, with word correction included. However, the rules of word correction are really strange.
Victor thinks that if a word contains two consecutive vowels, then it's kinda weird and it needs to be replaced. So the word corrector works in such a way: as long as there are two consecutive vowels in the word, it deletes the first vowel in a word such that there is another vowel right before it. If there are no two consecutive vowels in the word, it is considered to be correct.
You are given a word s. Can you predict what will it become after correction?
In this problem letters a, e, i, o, u and y are considered to be vowels.
The first line contains one integer n (1 ≤ n ≤ 100) — the number of letters in word s before the correction.
The second line contains a string s consisting of exactly n lowercase Latin letters — the word before the correction.
Output the word s after the correction.
5 weird
werd
4 word
word
5 aaeaa
a
题意:给你一个单词,从左到右进行统计,当出现连续的元音字母时删掉后一个,问你最后的结果。
思路:模拟,每碰到两个连续时,删掉后一个,同时新接合出来的位置可能还会连续,所以要继续删。
这里我用了string的erase()字符删除函数。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll vis[30],n,flag;
string s;
int main()
{
memset(vis,0,sizeof(vis));
vis[1]=vis[5]=vis[9]=vis[15]=vis[21]=vis[25]=1; //标记元音
while(cin>>n>>s)
{
while(1) //反复遍历这个字符串,直到没有连续元音时break
{
flag=0;
for(ll i=1;i<n;i++)
{
if(vis[s[i-1]-'a'+1]&&vis[s[i]-'a'+1])
{
flag=1;
s.erase(i,1); //字符串删除函数,i是起始位置,1是要删除几个元素
}
}
if(flag==0)break; //没有连续元音break
}
cout<<s<<endl;
}
return 0;
}