列表

详情


NC312. 字母异位词的长度

描述

现有两个仅由小写英文字母构成的字符串s, x,请判断它们是否为字母异位词,如果是的话,输出字母异位词的长度,不是的话,返回-1
注:如果每个字符出现的次数都相同,则称他们为字母异位词

数据范围:

示例1

输入:

"aba","aa"

输出:

-1

说明:

第一个字符串与第二个字符串a出现的次数相同,而b出现的次数不同,不符合每个字符出现的次数都相同。故输出-1

示例2

输入:

"a","a"

输出:

1

说明:

第一个字符串与第二个字符串每个字符出现的次数都相同,故输出相同的长度为1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 5ms, 内存消耗: 676KB, 提交时间: 2022-06-27

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param s string字符串 
 * @param c string字符串 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int isCongruent(char* s, char* c ) {
    // write code here
    int hash[26] = {0};
    int len_s = strlen(s);
    int len_c = strlen(c);
    if (len_s != len_c)
        return -1;
    for(int i = 0; i < len_c; i++)
    {
        hash[s[i] - 'a']++;
    }
    for(int i = 0; i < len_c; i++)
    {
        hash[c[i] - 'a']--;
    }
    for(int i = 0; i < 26; i++)
    {
        if(hash[i] != 0)
            return -1;
    }
    return len_c;
}

C++ 解法, 执行用时: 5ms, 内存消耗: 796KB, 提交时间: 2022-03-29

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param c string字符串 
     * @return int整型
     */
    int isCongruent(string s, string c) {
        if (s.length() != c.length()) return -1;
        vector<int> cnt(26, 0), zero(26, 0);
        for (int i = 0; i < s.length(); i++) {
            cnt[s[i] - 'a']++;
            cnt[c[i] - 'a']--;
        }
        if (cnt == zero) return s.length();
        return -1;
    }
};

C 解法, 执行用时: 6ms, 内存消耗: 652KB, 提交时间: 2022-06-19

int isCongruent(char* s, char* c ) {
    int f = strlen(s), k = strlen(c);
    if (f != k) {
        return -1;
    }
    int x[26] = { 0 }, y[26] = { 0 };
    for (int i = 0; i < f; i++) {
        x[s[i] - 'a'] ++;
        y[c[i] - 'a'] ++;
    }
    for (int i = 0; i < 26; i++) {
        if (x[i] != y[i]) {
            return -1;
        }
    }
    return f;
}

C 解法, 执行用时: 6ms, 内存消耗: 660KB, 提交时间: 2022-06-16

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param s string字符串 
 * @param c string字符串 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int isCongruent(char* s, char* c) {
    int sLen = strlen(s), cLen = strlen(c);
    if (sLen != cLen) {
        return -1;
    }
    int sHash[26] = { 0 }, cHash[26] = { 0 };
    for (int i = 0; i < sLen; i++) {
        sHash[s[i] - 'a'] += 1;
        cHash[c[i] - 'a'] += 1;
    }
    for (int i = 0; i < 26; i++) {
        if (sHash[i] != cHash[i]) {
            return -1;
        }
    }
    
    return sLen;
}

C 解法, 执行用时: 6ms, 内存消耗: 660KB, 提交时间: 2022-03-11

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param s string字符串 
 * @param c string字符串 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int isCongruent(char* s, char* c ) 
{
    int slen = strlen(s);
    int clen = strlen(c);
    if (slen != clen) return -1;
    short * counter = (short *) calloc(26, 2);
    int res = slen;
    for (int i = 0; i < slen; ++i)
    {
        ++counter[s[i] - 'a'];
    }
    for (int i = 0; i < slen; ++i)
    {
        --counter[c[i] - 'a'];
    }
    for (int i = 0; i < 26; ++i)
    {
        if(counter[i] != 0)
        {
            res = -1;
            break;
        }
    }
    return res;

}

上一题