先给题目喽~
给定两个字符串 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 后查看