Sure, though this isn't a brilliant algorithm to begin with. If you don't mind, I'll introduce a small change..
First of all a general tip, get rid of that string. Strings are terrible for anything that isn't a string, and you're using it to store an array of integers. Just use an array of integers. Also stop "removing" items from arrays. Just put permute it a bit and remember how many you've "removed" (so there would be two regions in the array, one for the items that are logically in it and one for items that have logically been removed).
But more importantly, you're exploring all of the search space, and you usually don't have to (except in annoying cases). If you calculate how much distance you've created in the partial circuit so far, you can prune entire sub-trees that can only lead to "worse than the best solution so far". That can be improved by starting out with a reasonable upper bound for example obtained using a greedy nearest-neighbour path and/or local search (2-OPT is the simplest, isn't too bad).
When you're doing that anyway, you can improve the pruning. The incomplete circuit has to be completed somehow, so you can add an underestimation of the required distance to complete it. A pretty basic one is to loop the partial circuit back to its beginning with the shortest path to it. But you can make a much better underestimation with linear programming; introduce a variable for every road, constrained to the range 0 .. 1. Add a constraint for every city that the sum of the variables corresponding to roads adjacent to that city is exactly 2. Constrain the roads that you've already chosen (implicitly by creating a partial permutation) to be 1. Set the weight of the variables to the length of their corresponding roads. Minimize using linear programming (get a library, it's hard to code it well). That actually gives an underestimation of the distance for the entire tour, not of the "part to finish it", so don't add it to the distance so far but just use it directly.
That will tend to create small subtours with 3 cities each, a bunch of triangles all over the map. That's sort of a shitty estimation, you can make it much better by banning the subtrours: take a subtour, create a constraint that the sum of the roads adjacent to that subtour be at least 2 (not exactly, you're allowed to go in and out multiple times, but you must go in an out at least once each so the sum of those roads is at least 2). Minimize again, if there are more subtours eliminate those as well. You'll probably get a solution that has roads "partially used" (ie assigned a value that is not either 0 or 1), so this doesn't give you the actual tour, just an underestimation of the distance it will be, given the choices made so far.
That's a half decent underestimation. Good enough to use for small problems, you can maybe handle 100 cities this way (much more than you can currently hope to handle). And this is just the beginning, there is so much more that you can do to improve the estimation, whole books have been written about it.