/*
本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。
欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。
我是一名有诗人气质的网络安全工程师
期待与你的思想交流碰撞出智慧的花火
水木清华
2002-03-23
字符串匹配
*/
#include <iostream>
using namespace std;
//字符串匹配的函数接口
//判断短字符串中的所有字符是否在长字符串中全部出现,区别于短字符串是否为长字符串的子字符串。
int String_Matching(string str1, string str2)
{
int short_str[128] = {0}; //记录短字符串中各种字符的出现情况
int long_str[128] = {0}; //记录短字符串中各种字符的出现情况
int count = 0; //短字符串和长字符串具有相同字符的个数
int sum = 0; //短字符串具有不同字符的总数
//字符记录:若某字符出现在(短、长)字符串中,则置该字符的 ASCII 码作为下标对应的数组元素为 1
for (int i = 0; i < str1.size(); i++)
{
short_str[str1[i]] = 1;
}
for (int i = 0; i < str2.size(); i++)
{
long_str[str2[i]] = 1;
}
//计数:第一个 if 语句:得到短字符串和长字符串具有相同字符的个数,第二个 if 语句:得到短字符串具有不同字符的总数
for (int i = 0; i < 128; i++)
{
if ((short_str[i] == 1) && (long_str[i] == 1))
{
count++;
}
sum += short_str[i];
}
//若短字符串和长字符串具有相同字符的个数 和 短字符串具有不同字符的总数 相等,则满足要求
if (count == sum)
{
cout << "true" << endl;
}
else if (count != sum)
{
cout << "false" << endl;
}
return 0;
}
//主函数
int main()
{
string ShortString, LongString;
while (cin >> ShortString >> LongString)
{
String_Matching(ShortString, LongString);
}
return 0;
}