トピック
2 つの文字列 s
と が 与えられた場合、 が のアナグラムで あるかどうかを t
判断する関数を作成します 。t
s
注:s
と の 各文字がt
同じ回数出現する 場合 、s
と は t
互いのアナグラムであると言われます。
例 1:
入力: s = "アナグラム"、t = "ナガラム" 出力: true
例 2:
入力: s = "rat"、t = "car" 出力: false
C++ コード
#include <iostream>
#include <vector>
using namespace std;
/*
* 有效的字母异位词问题
* 定义一个26个字符长的数组,迭代计算s中字符的个数,
* 如果再将t中的相同字符个数减去,结果小于0则输出false
*/
bool isAnagram(string s, string t) {
if (s.size() != t.size()) {
return false;
}
vector<int> cnt(26);
for (auto c : s) {
cnt[c - 'a']++;
}
for (auto c : t) {
cnt[c - 'a']--;
if (cnt[c - 'a'] < 0) {
return false;
}
}
return true;
}
int main() {
string s = "anagram";
string t = "nagaram";
bool ans = isAnagram(s, t);
cout << boolalpha << ans << endl;
return 0;
}
分析する
有効なアナグラム問題の場合、26 文字の長さの配列を定義し、s の文字数を繰り返し計算します。t の同じ文字の数を減算し、結果が 0 未満の場合は、false が出力されます。