专栏文章
题解:P13593 [NWRRC 2023] Missing Vowels
P13593题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioig9lv
- 此快照首次捕获于
- 2025/12/02 19:44 3 个月前
- 此快照最后确认于
- 2025/12/02 19:44 3 个月前
题目意思:
判断短名称 是否可以通过从全名称 中省略一些元音字母(可能为零个)得到。
解题思路:
-
逐个字符比较 和 。
-
当字符匹配时,两个指针都前进。
-
当字符不匹配时,检查f中的当前字符是否是元音:如果是元音,可以跳过(视为被省略), 如果不是元音,则匹配失败。
-
最后要确保 的所有字符都被匹配,且 中剩余字符(如果有)都是可以省略的元音
用双指针的方法实现,时间复杂度 (n为较长字符串的长度)。
注意事项:
- 元音字母是 , , , , 和 六个字母,而不是我们平时的五个!
- 不区分大小写:比较时统一转换为小写或大写!
上你们最最期待的代码
CPP#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;//完结撒花
}
管理员大大求过qaq(⑅˃◡˂⑅)
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...