用两个长度为26的数组分别记录两个数组中各个字母出现的次数,最后进行比较,出现不一样的即可判结。
int isCongruent(char* s, char* c){
    int n1 = strlen(s), n2 = strlen(c);
    if(n1 != n2)  return -1;   //长度不一样的两个字符串肯定不是异位
    int i = 0;
    int count1[26] ={0};
    int count2[26] ={0};
    for(i = 0; i<n1; i++)
        count1[s[i] - 'a']++;  //字符减字符,其实是ASCII码相减,即为字母间距
    //即count1[0]记录a出现次数,count1[1]记录b出现次数,依此类推
    for(i = 0; i<n2; i++)
        count2[c[i] - 'a']++;
    for(i = 0; i< 26; i++){
        if(count1[i] != count2[i]){  //只要出现不相等的,即可判结
            return -1;
            break;
        }
    }
    return n1; 
}
或者只用一个数组,第一个字符串数字母时用正计数,第二个字符串数字母时在第一组计数的基础上负计数,最后从头遍历,不=0的就是两个字符串中出现次数不同的字母。
int isCongruent(char* s, char* c){
    int n1 = strlen(s), n2 = strlen(c);
    if(n1 != n2)  return -1;
    int i = 0;
    int count[26] = {0};
    for(i = 0; i<n1; i++)
        count[s[i] - 'a']++;  //正计数
    for(i = 0; i<n2; i++)
        count[c[i] - 'a']--;   //负计数
    for(i = 0; i< 26; i++){
        if(count[i] != 0){
            return -1;
            break;
        }
    }
    return n1; 
}