使用 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'
廣告