专栏文章

题解:P13593 [NWRRC 2023] Missing Vowels

P13593题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioig9lv
此快照首次捕获于
2025/12/02 19:44
3 个月前
此快照最后确认于
2025/12/02 19:44
3 个月前
查看原文

题目意思: 判断短名称 ss 是否可以通过从全名称 ff 中省略一些元音字母(可能为零个)得到。

解题思路:
  • 逐个字符比较 ssff
  • 当字符匹配时,两个指针都前进。
  • 当字符不匹配时,检查f中的当前字符是否是元音:
    如果是元音,可以跳过(视为被省略), 如果不是元音,则匹配失败。
  • 最后要确保 ss 的所有字符都被匹配,且 ff 中剩余字符(如果有)都是可以省略的元音
用双指针的方法实现,时间复杂度O(n)O(n) (n为较长字符串的长度)。

注意事项:

  1. 元音字母是 aa , ee , ii , oo , uuyy 六个字母,而不是我们平时的五个!
  2. ‌不区分大小写‌:比较时统一转换为小写或大写!

你们最最期待的代码
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 条评论,欢迎与作者交流。

正在加载评论...