2022年11月17日 星期四

[2273] Find Resultant Array After Removing Anagrams

好像贅步很多again !!!
最後一個element 要考慮進去~
應該要可以寫進迴圈裡嗎?!
但是還是先這樣吧XD(又?!XD)
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
bool isAnagrams(char *a, char *b)
{
int alpha[26]={0,};
for (int i=0;i< strlen(a);i++)
{
alpha[a[i]-'a']++;
alpha[b[i]-'a']--;
}
for (int i=0;i<26;i++)
if (alpha[i]!=0)
return false;
return true;
}

char ** removeAnagrams(char ** words, int wordsSize, int* returnSize){
if (wordsSize==1)
{
*returnSize =1;
return words;
}
char ** ret= malloc (sizeof(char*)*wordsSize);
int nowIndex=0;
int count=0;
for (int i=0; i<wordsSize-1; i++)
{
int l1=strlen(words[i]);
int l2=strlen(words[i+1]);

if ((l1 == l2) && isAnagrams(words[i],words[i+1]))
continue;
else
{
ret[count]=malloc(sizeof(char)*(l1+1));
memcpy(ret[count], words[nowIndex], sizeof(char)*l1);
ret[count++][l1]='\0';
nowIndex=i+1;
}
}
int len = strlen(words[nowIndex]);
ret[count]=malloc(sizeof(char)*(len+1));
memcpy(ret[count], words[nowIndex], sizeof(char)*(len));
ret[count++][len]='\0';

*returnSize = count;
return ret;
}

感覺應該是~~~可以先把word[0] 寫進去?!
我的寫法是先往後比, 比到不一樣的時候才把第一個寫進去, 
所以到了最後一個在回圈裡會寫不到~~~(i+1 == lenght)
大概好像應該是這樣吧XD (逃)

沒有留言:

張貼留言