First of all: you will get much better results if you have more than just the name to match on, such as the address. Then you can use a record linkage engine to consider the evidence from all the properties. Using just the name is going to give poor precision in most cases.
The first thing you need to consider is if you are likely to see reordering of substrings. That is, "Restaurant Angry Diner" vs "Angry Diner Restaurant". In that case, q-grams, longest common substring and longest common subsequence are all good candidates. For q-grams you can choose between various sub-formulas and matchings.
If you want the order to matter, affine gap would probably be good for this particular. It's similar to Smith-Waterman but doesn't penalize so much for deletions. Basically, the first deletion is expensive, but then later deletions in the same place are less expensive.
As others have suggested, removing common words like "restaurant", "matbaren" etc before matching is likely to improve accuracy.
There are piles of libraries, but since you didn't specify the programming language it's hard to recommend one. What use is Java if you use PHP? Or vice versa?
But please note carefully what I wrote above: name alone is not going to work very well. Even if the names are identical it could still be two totally different restaurants.