C++中从给定字符集中生成单词的可能性


在这个问题中,我们有两个字符串str1和str2。我们的任务是检查str2的所有字符是否都存在于str1中。

让我们举个例子来理解这个问题

输入

str1 = “Hello”
str2 = “Hell”

输出 − yes

解释 − str2的所有字符都存在于str1中。

为了解决这个问题,一个简单的解决方案是检查str1中是否存在str2的每个字符,然后返回结果。

但是我们需要创建有效的解决方案。因此,我们将使用一个频率数组(对于所有有效字符长度为256),然后遍历str1并根据出现的相应字符增加频率数组中的值。然后我们将遍历str2,这将减少出现时的频率数组。在每次迭代中,我们还将检查此频率是否变为负数。如果变为负数,则不可能,否则可能。

示例

程序演示我们解决方案的实现

 在线演示

#include <iostream>
#include <string.h>
using namespace std;
bool isPresent(string str1, string str2){
   int freq[256] = { 0 };
   for (int i = 0; i<str1.length(); i++)
      freq[str1[i]]++;
   for (int i=0;i<str2.length(); i++) {
         if (freq[str2[i]] < 1)
            return false;
   }
   return true;
}
int main() {
   string str1 = "tutorialspoint";
   string str2 = "point";
   cout<<"All charcters of '"<<str2<<"' are ";
   isPresent(str1,str2)?cout<<"present":cout<<"not present";
   cout<<" in '"<<str1<<"' ";
   return 0;
}

输出

All charcters of 'point' are present in 'tutorialspoint'

更新于:2020年4月17日

115 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告