嗯,C#的速度堪忧啊。
方法一,莽字当先,暴力破解。
public class Solution {
public int NumJewelsInStones(string J, string S) {
int count=0;
foreach(char j in J){
foreach(char s in S){
if(j==s)
count++;
}
}
return count;
}
}
方法二,用字符串,根据J的内容,将S分割。
public class Solution {
public int NumJewelsInStones(string J, string S) {
char[]j =J.ToCharArray();
return S.Split(j).Length-1;
}
}
从结果来,一直莽一直爽。当然方法还有很多,虽然我也不知道。
从内容来看,解题思路应该大致可以分两种。一类,以string及其相关内容的属性、函数入手,就比如我用的Split。我本来一度打算用Trim(),例题都过了,提交才发现,Trim只应用于前置和尾随部分,对字符串中间的内容并不感兴趣。这让我很是伤心的。
另一个,就是把string当成数据串(数据流?)对待,毕竟,string也可以看做只读的char[],string.ToCharArray()则是可以将string转出可以修改的char[]。比如,在Leetcode评论中又看到其他语言采用Hash表的。
当然还有其他方法,我目前就是这些思路,还有待提高。
以上,内容为LeetCode 771号题目解答。