先上题目
思路:题目不难,两重循环即可解决。
在做这道题的时候,发现了一个细节。大概像我这样的新手都会忽视吧。一般情况下,我都习惯直接爱在循环判断里 组长度函数,觉得方便快捷。但是这样做的话,每次进行循环判定的时候都会进行一次函数求值。如果循环层数很大,或者代码里很多地方使用了这样的做法。会耗费大量的时间资源,降低算法速度。对比下面两种解法即可明白:
第一种 :耗时12ms
int numJewelsInStones(char* J, char* S) {
int i,j,count=0;
for(i=0;i<strlen(J);i++){
for(j=0;j<strlen(S);j++){
if(J[i]==S[j]){
count++;
}
}
}
return count;
}
第二种:耗时4ms
int numJewelsInStones(char* J, char* S) {
int Jlen=strlen(J);
int Slen=strlen(S);
int i,j,count=0;
for(i=0;i<Jlen;i++){
for(j=0;j<Slen;j++){
if(J[i]==S[j]){
count++;
}
}
}
return count;
}
第二种在进行循环直接,先进行函数求值,赋给一个变量,再进行循环,使用了多一点空间,在本题中算法效率就有了很大提升