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 isanother 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
Explanations of the examples:
- There is only one replace: weird
werd;
- No replace needed since there are no two consecutive vowels;
- aaeaa
aeaa
aaa
aa
a.
题目大意:给一个字符串,如果有两个连续的元音字母,则删掉后一个,一直进行这种操作,求最后的字符串.
分析:一个一个去枚举删就比较麻烦了,一个比较好的做法是用栈维护,枚举第i个位置,与栈顶的字符比较,看是否符合要求.最后输出栈里的字符串就好了.
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include <cmath> using namespace std; typedef long long LL; char s[110],ans[110]; int tot,n; bool check(char a,char b) { bool flag1 = false,flag2 = false; if (a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u' || a == 'y') flag1 = true; if (b == 'a' || b == 'e' || b == 'i' || b == 'o' || b == 'u' || b == 'y') flag2 = true; if (flag1 && flag2) return true; return false; } int main() { scanf("%d",&n); scanf("%s",s + 1); for (int i = 1; i <= n; i++) { if (!tot) ans[++tot] = s[i]; else { if (!check(ans[tot],s[i])) ans[++tot] = s[i]; } } for (int i = 1; i <= tot; i++) printf("%c",ans[i]); return 0; }