Reversing a String in Java
is there a shorter and a faster way than below to reverse a string?


Sure, 

new StringBuilder(string).reverse().toString()


is generally used. Here is code to reverse a string that's also quite nice and that might even be faster in some situations.

As to your code:


naming: avoid short variable names: c and s could be index and letter.
c = c - 1 is often written as c--.
you shouldn't just write your code in main, but in a function so that you can easily test it. And some unit test can never hurt.
your code throws a StringIndexOutOfBoundsException for the empty string.



  is this code efficient?


No, not really. I profiled it, and the result is: 

name                    per call (mean, ns)     per call (median, ns)     95th percentile (ns)     total (ms)     runs     
reverseCharToString     897                     892                       816                      5.7408         8000000  
reverseBuilder          132                     132                       101                      0.8448         8000000  
reverseArray            126                     125                       95                       0.8064         8000000 


Where reverseCharToString is your code, reverseBuilder is the code I pasted above, and reverseArray is the code I linked to. The main reason for this is that you are creating a lot of new objects.