Tillakaratne Dilshan scored his 17th one-day international century and shared a second wicket stand of 184 with Kumar Sangakkara to guide Sri Lanka to a series clinching eight wicket win over South Africa in the fourth match at Pallekele on Sunday.
The hosts were outplayed in the third match two days ago at the same venue but came back strongly with a clinical performance with bat and ball to take a 3-1 lead in the five-match series.
Man-of-the-match Dilshan paced his innings expertly, finishing unbeaten on 115 off 130 balls, while Sangakkara made 91 off 101 balls as Sri Lanka successfully chased down South Africa's total of 238 with six overs to spare.
Sangakkara was out going for his century, edging a drive off Morne Morkel to mid-off with his side 10 runs from their target.
He had a life on 33 when South Africa decided not to review a lbw shout off JP Duminy. Replays indicated the ball, which struck the batsman in line with the stumps, would have hit leg stump.
Sangakkara cashed in on his luck but fell short of what would have been his 17th one-day hundred.
South Africa looked headed for a total close to 300 when they were 172 for three at the halfway mark, but lost their way as the Sri Lankan spinners took control.
South Africa lost their remaining seven wicket for 62 runs, with Ajantha Mendis (four for 51) the chief destroyer.
Hashim Amla, who missed the first and third matches through injury and could not bat in the second, hit a fluent 77 off 71 balls, while Duminy was last out for 97.
The pitch had lost pace since the last match, making batting easier, and the Sri Lankan batsmen capitalised on the conditions.
The fifth and final match will be played in Colombo on Wednesday.