题解:P13593 [NWRRC 2023] Missing Vowels
LHC_Always_AC · · 题解
题目链接:P13593 [NWRRC 2023] Missing Vowels
题目意思:
判断短名称
解题思路:
- 逐个字符比较
s 和f 。 - 当字符匹配时,两个指针都前进。
-
当字符不匹配时,检查f中的当前字符是否是元音:
如果是元音,可以跳过(视为被省略), 如果不是元音,则匹配失败。
- 最后要确保
s 的所有字符都被匹配,且f 中剩余字符(如果有)都是可以省略的元音
用双指针的方法实现,时间复杂度
注意事项:
- 元音字母是
a ,e ,i ,o ,u 和y 六个字母,而不是我们平时的五个! - 不区分大小写:比较时统一转换为小写或大写!
上你们最最期待的代码
#include<bits/stdc++.h>
using namespace std;
// 判断字符是否是元音字母
bool judge(char c)
{
c = tolower(c);
return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y');
}
// 检查s是否可以通过从f中省略元音字母得到
bool check(string s, string f)
{
int i = 0 , j = 0;
while(i < s.size() && j < f.size())
{
if(tolower(s[i]) == tolower(f[j]))
{
i++;
j++;
}
else
{
if(judge(f[j]))
j++;
else
return false;
}
}
// 检查f中剩余字符是否都是可以省略的元音字母
while(j < f.size())
{
if(!judge(f[j]))
return false;
j++;
}
return (i == s.size());
}
int main()
{
string s , f;
cin >> s >> f;
if(check(s , f))
cout << "Same";
else
cout << "Different";
return 0;//完结撒花
}