Рекурсивный подход - подмножества "abc" бывают двух типов: те, которые являются подмножествами "bc", и те, которые являются "a" плюс подмножество "bc". Так что если вы знаете подмножества "bc", это просто.
В качестве альтернативы, строка длиной n имеет 2 ^ n подмножеств. Итак, напишите два вложенных цикла: i считает от 0 до 2 ^ n -1 (для подмножеств), а j считает от 0 до n-1 (для символов в i-м подмножестве). Выведите j-й символ строки, если и только если j-й бит i равен 1.
(Ну, вы же сказали, что "лучший" был субъективным ...)