题目描述:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
算法1:
根据ASCII码值来判定两个字符是否相等。因此我们可以借用数组下标来记录字符串中每一位字符的出现次数。
例如: 字符串 n 中出现了 'r' , r 的 ASCLL码值为 114 , 则在相应的下标的数组里记录一次 : 数组 a [ 114 ] + = 1 ;
字符串 m 中出现了 't' , t 的 ASCLL码值为 116 , 则在相应的下标的数组里记录一次 : 数组 b [ 116 ] + = 1 ;
.......
两个字符串记录完毕以后,遍历 a , b 两个数组中相同下标的数组值是否都相等,即可判定两个字符串中的字符是否 相同。
class Solution {
public:
bool isAnagram(string n,string m){
int s1,s2;
int a[256] = {0};
int b[256] = {0};
if(n.size()==m.size()){ //如果两个字符串的长度不等,则一定不符合条件
for(int i=0;i<n.size();i++){
s1 = n.at(i); //用 at() 来获取字符串中的某一位字符
a[s1]+=1; //记录在数组中
}
for(int i=0;i<m.size();i++){
s2 = m.at(i);
b[s2]+=1;
}
for(int i= 0;i<256;i++){
if(a[i]==b[i]){
//如果这对值相等,则什么都不做
}
else{
return false; //如果有一对值不相等,直接返回 false
}
}
return true;
}
return false;
}
int main(){
string n,m;
while(cin>>n>>m){
cout<<isAnagram(n,m)<<endl;
}
return 0;
}
};