专栏文章
题解:P13593 [NWRRC 2023] Missing Vowels
P13593题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miohwyo7
- 此快照首次捕获于
- 2025/12/02 19:29 3 个月前
- 此快照最后确认于
- 2025/12/02 19:29 3 个月前
分析
题目就是让我们判断短名称 是否可以通过从全名称 中省略部分元音字母得到。
算法
核心函数解析
pdxt()函数:判断字母是否相同(不区分大小写);
bool pdxt(char a,char b)
{
return tolower(a)==tolower(b);// 不区分大小写的字符比较
//int tolower() :头文件cstring 的库函数,将字符转化为小写字母
}
pdyi()函数:判断字符是否为元音(包含 y);
bool pdyi(char a)
{
a=tolower(a);
return a=='a'||a=='e'||a=='i'||a=='o'||a=='u'||a=='y';\\检测元音字母
}
cmpar()主逻辑函数:实现核心匹配算法,双指针同步遍历,允许跳过长字符串中的元音字母。
bool cmpar(char* s,char* f)
{
while (*s&&*f)// 双指针遍历
{
if (pdxt(*f,*s)) s++, f++;// 字符匹配
else if (pdyi(*f)) f++; // 跳过f中的元音
else return false;// 不匹配且非可省略字符
}
while (*f&&pdyi(*f)) f++;// 处理f剩余元音
return !*s&&!*f;// 检查是否同时遍历完毕
}
完整纯净版代码 awa
CPP#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
bool f;
int i,j;
char s1[1005],f1[1005];
bool pdxt(char a,char b)
{
return tolower(a)==tolower(b);
}
bool pdyi(char a)
{
a=tolower(a);
return a=='a'||a=='e'||a=='i'||a=='o'||a=='u'||a=='y';
}
bool cmpar(char* s,char* f)
{
while (*s&&*f)
{
if (pdxt(*f,*s)) s++, f++;
else if (pdyi(*f)) f++;
else return false;
}
while (*f&&pdyi(*f)) f++;
return !*s&&!*f;
}
int main()
{
cin>>s1;
cin>>f1;
cout<<(cmpar(s1,f1)?"Same":"Different");
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...