题解 | #字母异位词的长度#

字母异位词的长度

http://www.nowcoder.com/practice/59426f49136349b0901cc1b70447bf4b

用两个长度为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; 
}



全部评论

相关推荐

09-17 19:25
已编辑
太原理工大学 游戏测试
叁六玖:公司名发我,我要这个HR带我打瓦
我的秋招日记
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务