pat advanced 1050

本文解决了一个限时10ms的编程挑战,通过使用数组存储ASCII字符出现情况来过滤并输出未出现在第二串中的字符。文章分享了一种高效处理字符串的方法,并附带参考代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:http://pat.zju.edu.cn/contests/pat-a-practise/1050

很坑爹,限时10ms,因为

int len = strlen(ch1);
    for(int i = 0; i<len; ++i
写成了for(int i = 0; i<strlen(ch1); ++i)

所以一直有两个case TLE。

思路,先把字符串1存起来,字符串2用map或者一个数组关联起来,再遍历字符串1,有字符串2的不输出。

数组开128是因为英文ascii码小于128,因为可能有逗号句号空格这样的就不止26个英文字母了。

参考代码:

#include<cstdio>
#include<cstring>
using namespace std;

char ch1[10001];
int arr[128];

int main()
{
    gets(ch1);
    char ch;
    while((ch = getchar()) != EOF)
    {
        arr[ch] = 1;
    }
    int len = strlen(ch1);//换成for(int i = 0; i<strlen(ch1); ++i) TLE
    for(int i = 0; i<len; ++i)
    {
        if(!arr[ch1[i]])
        {
            printf("%c", ch1[i]);
        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值