今天在codewars上遇到一个问题,问题描述是这样的
Complete the function scramble(str1, str2) that returns true if a portion of str1 characters can be rearranged to match str2, otherwise returns false.
Notes:
Only lower case letters will be used (a-z). No punctuation or digits will be included.
Performance needs to be considered
Input strings s1 and s2 are null terminated.
Examples
scramble(‘rkqodlw’, ‘world’) ==> True
scramble(‘cedewaraaossoqqyt’, ‘codewars’) ==> True
scramble(‘katas’, ‘steak’) ==> False
我写的解决方法如下,虽然通过了全部随机测试,但是关于performance的测试没有通过,能请高手帮我看看是怎么肥事嘛? 感激不尽!
#include <stdbool.h>
bool scramble(const char *str1, const char *str2)
{
char letters [26] = {0};
char letters2[26] = {0};
while(*str1) letters[(*str1++)-'a']++;
while(*str2) letters2[(*str2++)-'a']++;
int i;
for(i=0;i<26;i++)
{
if(letters2[i]>letters[i])
{return false;break;}
else{continue;}
}
return true;
}
大侠们感激不尽哪!
已解决!谢谢大家
#include <stdbool.h>
bool scramble(const char *str1, const char *str2)
{
int letters [26] = {0};
int letters2[26] = {0};
while(*str1) letters[(*str1++)-'a']++;
while(*str2) letters2[(*str2++)-'a']++;
int i;
for(i=0;i<26;i++)
{
if(letters2[i]>letters[i])
{return false;break;}
else{continue;}
}
return true;
}