You can find the technique for balancing redox equations in this Socratic answer, so I will just go through the steps.
Step 1: Write the two half-reactions.
#"PbS" → "PbSO"_4 #
#"O"_3 → "O"_2#
Step 2: Balance all atoms other than #"H"# and #"O"#.
Done.
Step 3: Balance #"O"#.
#"PbS + 4H"_2"O" → "PbSO"_4 #
#"O"_3 → "O"_2 + "H"_2"O"#
Step 4: Balance #"H"#.
#"PbS + 4H"_2"O" → "PbSO"_4 + "8H"^"+"#
#"O"_3 + "2H"^"+" → "O"_2 + "H"_2"O"#
Step 5: Balance charge.
#"PbS + 4H"_2"O" → "PbSO"_4 + "8H"^"+" + "8e"^"-"#
#"O"_3 + "2H"^"+" + "2e"^"-" → "O"_2 + "H"_2"O"#
Step 6: Equalize electrons transferred.
#1 × ["PbS + 4H"_2"O" → "PbSO"_4 + "8H"^"+" + "8e"^"-"]#
#4 × ["O"_3 + "2H"^"+" + "2e"^"-" → "O"_2 + "H"_2"O"]#
Step 7: Add the two half-reactions.
#"PbS" + color(red)(cancel(color(black)("4H"_2"O"))) → "PbSO"_4 + color(red)(cancel(color(black)("8H"^"+"))) + color(red)(cancel(color(black)("8e"^"-")))#
#4"O"_3 + color(red)(cancel(color(black)("8H"^"+"))) + color(red)(cancel(color(black)("8e"^"-"))) → "4O"_2 + color(red)(cancel(color(black)("4H"_2"O")))#
#stackrel(——————————————————)("PbS + 4O"_3 → "PbSO"_4 + "4O"_2)#
Step 8: Check mass balance.
#mathbf("Atom"color(white)(m)"On the left"color(white)(m)"On the right")#
#color(white)(ml)"Pb"color(white)(mmmmll)1color(white)(mmmmmmm)1#
#color(white)(ml)"S"color(white)(mmmmml)1color(white)(mmmmmmm)1#
#color(white)(ml)"O"color(white)(mmmmll)12color(white)(mmmmmml)12#
Step 9: Check charge balance.
#mathbf("On the left"color(white)(m)"On the right")#
#color(white)(mmm)0color(white)(mmmmmmll)0#
Everything balances, so the balanced equation is
#"PbS + 4O"_3 → "PbSO"_4 + "4O"_2#
Note: The trick is in the ozone half-reaction.
At first it appears as if #"O"_3 → "O"_2# involves no change in oxidation number.
However, the half-reaction is really #"O"_3 → "H"_2"O"#, and you don’t use #"H"_2"O"# in Step 1 because you use it later in Step 3 for balancing #"O"#.