1002. 查找共用字符
简单
335
相关企业
给你一个字符串数组 words
,请你找出所有在 words
的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。
示例 1:
输入:words = ["bella","label","roller"] 输出:["e","l","l"]
示例 2:
输入:words = ["cool","lock","cook"] 输出:["c","o"]
提示:
1 <= words.length <= 100
1 <= words[i].length <= 100
words[i]
由小写英文字母组成
通过次数
84.6K
提交次数
119.5K
通过率
70.8%
请问您在哪类招聘中遇到此题?
1/5
社招
校招
实习
未遇到
相似题目
相关标签
贡献者
© 2023 领扣网络(上海)有限公司
时间8 ms
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char ** commonChars(char ** words, int wordsSize, int* returnSize){
//出现相同的字符且数目相同
//尝试使用哈希表
int minfreq[26],freq[26];
//minfreq[c] 存储字符 ccc 在所有字符串中出现次数的最小值
//freq[c] 统计 sss 中每一个字符 ccc 出现的次数
for(int i=0;i<26;i++){
minfreq[i]=INT_MAX;
//将每一个 minfreq[c]\textit{minfreq}[c]minfreq[c] 更新为其本身与 freq[c]\textit{freq}[c]freq[c] 的较小值
freq[i]=0;
}
for(int i=0;i<wordsSize;i++){
memset(freq,0,sizeof(freq));
int n=strlen(words[i]);
for(int j=0;j<n;j++){
++freq[words[i][j]-'a'];
}
for(int j=0;j<26;j++){
minfreq[j]=fmin(minfreq[j],freq[j]);
}
}
int sum=0;
for(int i=0;i<26;i++){
sum+=minfreq[i];
}
char**ans=malloc(sizeof(char*)*sum);
*returnSize=0;
for(int i=0;i<26;i++){
for(int j=0;j<minfreq[i];j++){
ans[*returnSize]=malloc(sizeof(char)*2);
ans[*returnSize][0] = i + 'a';
ans[*returnSize][1] = 0;
(*returnSize)++;
}
}
return ans;
}
4 ms 的代码示例
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char ** commonChars(char ** words, int wordsSize, int* returnSize){
if(words==NULL||wordsSize==0){
(*returnSize)=0;
return NULL;
}
int res[100][26] = {0};
char **rslt = malloc(sizeof(char*)*100);
int i,j;
for(i=0;i<100;i++){
rslt[i]=malloc(sizeof(char)*2);
}
for(i=0;i<wordsSize;i++){
for(j=0;j<strlen(words[i]);j++){
res[i][words[i][j]-'a']++;
}
}
int dex = 0;
for(i=0;i<26;i++){
int min =res[0][i];
for(j=1;j<wordsSize;j++){
if(res[j][i]<min){min = res[j][i];}
}
while(min>0){
rslt[dex][0]=i+'a';
rslt[dex][1]='\0';
dex++;
min--;
}
}
(*returnSize)=dex;
return rslt;
}
0 ms 的代码示例
char** commonChars(char** words, int wordsSize, int* returnSize) {
int minfreq[26], freq[26];
for (int i = 0; i < 26; ++i) {
minfreq[i] = INT_MAX;
freq[i] = 0;
}
for (int i = 0; i < wordsSize; ++i) {
memset(freq, 0, sizeof(freq));
int n = strlen(words[i]);
for (int j = 0; j < n; ++j) {
++freq[words[i][j] - 'a'];
}
for (int j = 0; j < 26; ++j) {
minfreq[j] = fmin(minfreq[j], freq[j]);
}
}
int sum = 0;
for (int i = 0; i < 26; ++i) {
sum += minfreq[i];
}
char** ans = malloc(sizeof(char*) * sum);
*returnSize = 0;
for (int i = 0; i < 26; ++i) {
for (int j = 0; j < minfreq[i]; ++j) {
ans[*returnSize] = malloc(sizeof(char) * 2);
ans[*returnSize][0] = i + 'a';
ans[*returnSize][1] = 0;
(*returnSize)++;
}
}
return ans;
}