PTA乙级 1093 字符串A+B

发布于:2022-10-21 ⋅ 阅读:(420) ⋅ 点赞:(0)

 先给题目喽~

给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除

输入格式:

输入在两行中分别给出 A 和 B,均为长度不超过 106的、由可见 ASCII 字符 (即码值为32~126)和空格组成的、由回车标识结束的非空字符串。

输出格式:

在一行中输出题面要求的 A 和 B 的和。

输入样例:

This is a sample test
to show you_How it works

输出样例:

This ampletowyu_Hrk

思路:首先,老生常谈的字符串类型题。由题意可知,是对两串字符去重,然后按序输出。

          那么,第一种想法就来了,只要我先遍历第一个字符串,用数组接收非重复字符即可。

          另一个字符串也对照接收的字符串去重,最后输出。

          逻辑即为:

          字符串A,B,C。A和B负责输入两段字符串;

           遍历A,如果遇到重复字符就跳过, 遇到非重复字符就加入C中;

           然后遍历B,在C中遇到重复字符就跳过,非重复字符则加入C中;

           输出。

废话不多说,代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string a,b,c;
    getline(cin,a);
    getline(cin,b);
    for(int i=0;i<a.length();i++)
    {
        if(c.find(a[i])==-1)
        {
            c+=a[i];
            cout<<a[i];
        }
    }
    for(int i=0;i<b.length();i++)
    {
        if(c.find(b[i])==-1)
        {
            c+=b[i];
            cout<<b[i];
        }
    }
    return 0;
}

find函数不赘述了,在我之前的博客里有详细解读,有兴趣可以看看我的另一篇博文,连接放在下面。

PTA乙级-1033 旧键盘打字_是老玄啊~的博客-CSDN博客

最后,展示下柳神的代码:

#include <iostream>
using namespace std;
int main() {
    string s1, s2, s;
    int hash[200] = {0};
    getline(cin, s1);
    getline(cin, s2);
    s = s1 + s2;
    for (int i = 0; i < s.size(); i++) {
        if (hash[s[i]] == 0) cout << s[i];
        hash[s[i]] = 1;
    }
    return 0;
}

看到柳神代码的我瞬间觉得find函数不香了,因为题目内有明确的ASCII码范围,所以柳神直接使用了哈希表去进行判断重复,膜拜大神。

如果你觉得有帮助,不妨点赞评论关注一键三连,拜谢。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到