92 字符串统计
作者: SunCiHai时间限制: 10S章节: 字符串
明明最近在做一个有关字符串的统计工作。两个由小写字母组成的字符串s1和s2,明明需要统计出以下四种关系:
(1)在s1或s2中存在的字母(包括在s1和s2中都存在的字母);
(2)在s1中且在s2中的字母;
(3)在s1中但不在s2中的字母,在s2中但不在s1中的字母;
(4)不在s1中且也不在s2中的字母;
例如两个字符串s1为“lkjsvoahs”,s2为“qglhskjdfg”:
(1)在s1或者在s2或者s1、s2中都存在的字母:adfghjkloqsv;
(2)在s1中且在s2中的字母:hjkls;
(3)在s1中但不在s2中的字母,在s2中但不在s1中的字母:adfgoqv;
(4)不在s1中且也不在s2中的字母:bceimnprtuwxyz;
明明统计了很久,但是由于统计过程十分繁琐,且很容易出错,导致明明的进度非常慢,很有可能因为统计不完而错过了晚上的约会。因此明明想请你帮个忙,帮他写一个程序,用程序来统计出以上几项内容。
明明的问题可以归结为:
输入两串由小写字母组成的字符串s1和s2,比较其中的字母,输出以下四项,输出的字母以字典顺序排列:
(1)在s1或s2中存在的字母(包括在s1和s2中都存在的字母);
(2)在s1中且在s2中的字母;
(3)在s1中但不在s2中的字母,在s2中但不在s1中的字母;
(4)不在s1中且也不在s2中的字母;
例如字符串s1为sadf,s2为asdf,则需输出以下四行(注意输出的格式):
in s1 or s2:adfs
in s1 and s2:adfs
in s1 but not in s2 ,or in s2 but not in s1:
not in s1 and s2:bceghijklmnopqrtuvwxyz
#include<bits/stdc++.h>
#include<bitset>
#include<unordered_map>
#define pb push_back
#define bp __builtin_popcount
#define TIME cout << "RuningTime: " << clock() << "ms\n", 0
#define ls x<<1
#define rs x<<1|1
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=1e6+10;
const int MOD=9901;
const int mod = 1e9+7;
const double PI=3.14;
int lowbit(int x){return x&-x;}
ll gcd(ll x, ll y){ return y == 0 ? x : gcd(y, x%y); }
ll lcm(ll x, ll y){ return x / gcd(x, y)*y; }
inline ll dpow(ll a, ll b){ ll r = 1, t = a; while (b){ if (b & 1)r = (r*t) % MOD; b >>= 1; t = (t*t) % MOD; }return r; }
inline ll fpow(ll a, ll b,ll p){ ll r = 1, t = a; while (b){ if (b & 1)r = (r*t) % p; b >>= 1; t = (t*t) % p; }return r; }
priority_queue<int, vector<int>, greater<int> > q;
int main()
{
string s1,s2;
while(cin>>s1>>s2)
{
int num[27];
memset(num,0,sizeof num);
set<char>se1,se2;
for(int i=0;i<s1.length();i++)
{
se1.insert(s1[i]);
num[s1[i]-'a'+1]++;
}
for(int i=0;i<s2.length();i++)
{
se2.insert(s2[i]);
num[s2[i]-'a'+1]++;
}
vector<char>v;
for(int i=0;i<s1.length();i++)
v.push_back(s1[i]);
for(int i=0;i<s2.length();i++)
v.push_back(s2[i]);
sort(v.begin(),v.end());
cout<<"in s1 or s2:";
for(int i=0;i<v.size();i++)
{
if(i==0)cout<<v[i];
else if(v[i]==v[i-1])continue;
else cout<<v[i];
}
cout<<endl;
cout<<"in s1 and s2:";
vector<char>a;
for(int i=0;i<s1.length();i++)
{
if(se2.count(s1[i]))
a.push_back(s1[i]);
}
sort(a.begin(),a.end());
for(int i=0;i<a.size();i++)
{
if(i==0)cout<<a[i];
else if(a[i]==a[i-1])continue;
else cout<<a[i];
}
cout<<endl;
cout<<"in s1 but not in s2 ,or in s2 but not in s1:";
vector<char>b;
for(int i=0;i<s1.length();i++)
{
if(!se2.count(s1[i]))//在s1但是不在s2
b.push_back(s1[i]);
}
for(int i=0;i<s2.length();i++)
{
if(!se1.count(s2[i]))
b.push_back(s2[i]);
}
sort(b.begin(),b.end());
for(int i=0;i<b.size();i++)
{
if(i==0)cout<<b[i];
else if(b[i]==b[i-1])continue;
else cout<<b[i];
}
cout<<endl;
cout<<"not in s1 and s2:";
for(int i=1;i<=26;i++)
{
if(num[i]==0)cout<<char('a'+i-1);
}
cout<<endl;
cout<<endl;
}
return 0;
}