This is recommended for those, who are using shared hosting and not able to remove public from route.
the easiest and simplest way to remove public keyword from Laravel routes is follow these steps.
Put all your files and folder except Public folder, outside
public_html folder, I mean Root folder of your site.

Then grab all files and folder from Public folder and put them
into public_html folder.

once done with this, then create a file (name it, paths.php) into your bootstrap folder (Laravel folder exists in your root folder) copy below code into paths.php file
<?php
return array(
'app' => __DIR__.'/../app',
'public' => __DIR__.'/../public_html',
'base' => __DIR__.'/..',
'storage' => __DIR__.'/../app/storage',
);
Now access your website without public word in URL, if you see error, then try to Hard reload (Ctrl + 5) it. Thats it
Note: This is not the recommended way, in shared hosting, better to ask your Hosting Manager/ re-seller to change your domain mapping on public_html/public instead public_html. and if you are using dedicated, cloud hosting then you can change it by yourself in your Virtual Host file.