The hardest part of this question for me was the phrasing. However, I do sort of like this question: hopefully the student will realize they need to repeatedly check the string (set) of jewels, as they iterate over their stones. I don’t know how I feel about the fact that we’re using strings as sets, basically. It does happen in the real world.
Again, from the archives. This is me having too much fun with C++-isms. You can see my inline notes about other approaches.
class Solution {
public:
int numJewelsInStones(string J, string S) {
// let's do this very simply, no helper objects.
int jewelCount = 0;
for (auto&& stone : S) {
if (std::find(std::begin(J), std::end(J), stone) != std::end(J))
{
jewelCount++;
}
}
// We can do lots of things, really. We should cache J into a set, perhaps, and
// then can just do a fancier std::algorithms (for_each) sort of thing, if that
// strikes our fancy. filter etc.
return jewelCount;
}
};
We may even be able to collapse the outer for-loop into a count_if
call or something… but that’s probably too clever. Who knows.
I guess this is a strings question? Even though it’s really treating strings as a set.