PAT 乙级 1093.字符串A+B C++/Java

题目来源

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

输入格式:

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

输出格式:

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

输入样例:

This is a sample test
to show you_How it works

输出样例:

This ampletowyu_Hrk

分析:

  • 给两个字符串,把它们合并起来

  • 依次输出字符串的每个字符,输出过的字符就不输出了

  • 如果map/数组中有这个字符,就不输出了

    • 否则就输出字符,并存入map(或者大小为127的数组)

注意:

  • 输入中,空格也是字符串的一部分,因此字符串不能使用cin接收
    • getline(cin, str)可以接收空格

C++实现:

使用数组

#include <iostream>
#include <string>

using namespace std;

int main() {
    int m[200] = { 0 };
    string A, B;
    getline(cin, A);
    getline(cin, B);
    string s = A + B;


    for (int i = 0; i < s.size(); ++i) {
        if (m[s[i]] != 1) {
            m[s[i]] = 1;
            cout << s[i];
        }
    }
    return 0;
}

使用unordered_map<char, int>

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;


int main() {
    string A, B;
    getline(cin, A);
    getline(cin, B);
    A = A + B;

    unordered_map<char, int> m;

    for (int i = 0; i < A.size(); ++i) {
        if (m[A[i]] != 1) {
            m[A[i]] = 1;
            cout << A[i];
        }
    }
    return 0;
}

Java实现:

// TODO
posted @ 2020-05-22 00:27  47的菠萝~  阅读(147)  评论(0编辑  收藏  举报