有効なアナグラム (C++ ソリューション)

トピック

2 つの文字列 s と が 与えられた場合、 が のアナグラムで あるかどうかを t 判断する関数を作成します 。ts

注: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 が出力されます。

おすすめ

転載: blog.csdn.net/m0_62275194/article/details/133934325