leetcode--字母异位词分组(C语言)

题目:给定一个字符串数组,将字母异位词分别放在一个数组内,返回的结果顺序不要求。

字母异位词:就是两字符串内容是一样的,只不过字母的排列顺序不同,如:"abc"和"bac"

栗子:

输入:strs=["china","hcina","chinese","anihc","best","chinsee"];

输出: [["china","hcina","anihc"],["chinese","chinsee"],["best"]]

输入:strs=["a"]

输出:[["a"]]

注意:

1<=strs.length<=10^4;

0<=strs[i].length<=100;

strs[i]仅仅包含小写字母

大家先根据题目的要求完成以下函数。

/**

 * Return an array of arrays of size *returnSize.

 * The sizes of the arrays are returned as *returnColumnSizes array.

 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().

 */

char *** groupAnagrams(char ** strs, int strsSize, int* returnSize, int** returnColumnSizes){

}

 

这道题虽然看起来有点点复杂,如果你是自己思考得出的结果,或许你会对hash表有进一步的了解。

答案:排序+hash

输入:strs=["beauty","bueaty"];

显然这两个字符串是字母异位词,判断是否为字母异位词就是判断它的内容是否是一样。为了方便去比较判断,我们先进行对字符串排序,排好序之后直接使用strcmp进行比较即可。

hash表结构:

leetcode--字母异位词分组(C语言)_第1张图片

 

排序代码:

 

 解释:len是比较字符串的长度,tmp作用是记录未排序之前的字符串。

判断排好序的字符串在hash表中是否存在。

如果不存在,则将其加入hash表

leetcode--字母异位词分组(C语言)_第2张图片 

leetcode--字母异位词分组(C语言)_第3张图片 

解释:returnArr是返回数组。 

如果存在的话,则在其字母异位字组后面继续添加

 

整体代码:

leetcode--字母异位词分组(C语言)_第4张图片

 

你可能感兴趣的:(leetcode,算法,职场和发展)