Defines are replaced by the compiler's preprocessor before compilation. So example 1 and 2 are *exactly* the same in the end. Using defines you can get that info to the top of the file for convenience, and update multiple occurances of the same string with ease.
Using a global const variable is helpful because the AMXX compiler is not clever enough to collapse usages of the same string literal into one. So if you write "1.0.0" as your version string ten times in your plugin (or use an equivalent define) it will actually end up ten times in the file.