I would guess that there is no efficient way of doing this, i.e. brute force is the only way to go. By brute force you form all possible subsets that you can form and see which form a group.

But pure guessing is not good too you should use some known properties about (finite) groups:

1)A subgroup must contain the identity element.

2)The subgroup must divide the order of the group.

3)The subgroup of a cyclic group is cyclic.

There might be more well-established facts about subgroups but those three are the most basic ones.

So in the Klein-4-group the possible sizes for a subgroup are: 1,2,4. Because those are divisors of 4. 1 being the trivial group. 4 being, the other extreme, the improper group. While the 2 are all intermediate groups. Now it needs to contain #1 which means there are 3 possible elements left to make a 2 element subset. So there are three possibilities to check. Easy.

With all subgroups must be cyclic. So create all possible cyclic subgroups and those must be a complete list.