给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true
示例 2: 输入: s = “rat”, t = “car” 输出: false
说明: 你可以假设字符串只包含小写字母。
本题字符串只包含小写字母,所以可以创建一个大小为26的哈希表,记录字符串s,t中字符出现的次数,先遍历字符串s,在出现字符的位置上加1,再遍历字符串t,在出现字符的位置上-1,若遍历结束后哈希表为空,则表示两个字符串是字母异位词
s[i]-‘a’ 可以计算出字母相对于’a’的位置,并且不需要记住a的ASCII值
class Solution{
public:
bool isAnagram(string s, string t){
int record[26] = {0};
for (int i = 0; i < s.size(); i++){
// 在元素对应位置+1
record[s[i] - 'a']++;
}
for (int i = 0; i < t.size(); i++){
// 在元素对应位置-1
record[t[i] - 'a']--;
}
for (int i = 0; i < 26; i++){
if (record[i] != 0){
return false;
}
}
return true;
}
};
#include <iostream>
using namespace std;
class Solution{
public:
bool isAnagram(string s, string t){
int record[26] = {0};
for (int i = 0; i < s.size(); i++){
record[s[i] - 'a']++;
}
for (int i = 0; i < t.size(); i++){
record[t[i] - 'a']--;
}
for (int i = 0; i < 26; i++){
if (record[i] != 0){
return false;
}
}
return true;
}
};
int main(){
string s;
string t;
cout << "请输入字符串s:";
cin >> s;
cout << "请输入字符串t:";
cin >> t;
Solution solution;
bool b = solution.isAnagram(s, t);
if (b){
cout << "true" << endl;
}
else{
cout << "false" << endl;
}
system("pause");
return 0;
}