使用 C++ 檢查兩個字串是否互為字謎


假設我們有兩個給定的字串 'a' 和 'b'。我們需要檢查這兩個字串是否互為字謎。如果一個字串包含與另一個字串相同的字元,則稱這兩個字串互為字謎。

例如

輸入 1

a= anagram
b= gnarama

輸出

True

解釋 − 字串 'gnarama' 與字串 'anagram' 包含相同的字元。因此我們返回 True。

輸入 2

a= programmer
b= mprogretmrqp

輸出

False

解釋 − 字串 'b' 的字元比字串 'a' 多,因此我們可以說字串的長度不同。因此我們返回 False。

下面程式中用於解決此問題的方法如下:

對於給定的兩個字串,我們獲取字串的長度,如果字串的長度不同,我們將返回 False。否則,如果字串的長度相同,我們將檢查該字串的每個字元是否與另一個字串的字元匹配,並返回 True,否則返回 False。

  • 輸入兩個字串 'a' 和 'b'

  • 布林函式 checkAnagram(string a, string b) 獲取兩個字串 'a' 和 'b',並返回它們是否互為字謎。

  • 查詢字串 'a' 和 'b' 的長度,並檢查它們是否相等。如果不相等,則返回 false。

  • 使用 C++ STL(標準模板庫)map 函式,透過迭代字串 'a' 來建立每個字元的雜湊表。

  • 在建立字串 'a' 的每個字元的對映時,刪除字串 'b' 中存在的那些字元。

  • 然後迭代對映並檢查雜湊表中是否還有任何字元,如果存在則返回 False,否則返回 True。

示例

 線上演示

#include<bits/stdc++.h>
using namespace std;
bool checkAnagram(string a, string b){
   int len1= a.length();
   int len2= b.length();
   if(len1!= len2) {
      return false;
   }
   unordered_map <char,int> mp;
   for(int i=0;i<a.size();i++) {
      mp[a[i]]++;
      mp[b[i]]--;
   }
   for(auto it:mp){
      if(it.second) return false;
   }
   return true;
}
int main(){
   string a= "anagram";
   string b= "gnarama";
   cout<< checkAnagram(a,b)<<endl;
   return 0;
}

輸出

如果我們執行上述程式碼,它將列印輸出為:

1

由於兩個輸入字串互為字謎,因此它返回 True,即 '1'

更新於:2021年2月5日

2K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告