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 次檢視

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.