You could try something like this. I bet there's a way to do this with regular expressions, but I don't know off the top of my head.
string Complement(string floorPlan)
{
int index = rand.Next(floorPlan.Length); //get a random integer within array bounds
if (floorPlan[index] != 'H' || floorPlan[index] != 'V') // if we didn't grab a letter, return
return floorPlan;
int start = index; //we'll need to find the start of the 'letter group'
for (int i = index; i >= 0; i--) // work backwards through the string
if (floorPlan[i] == 'H' || floorPlan[i] == 'V') // updating if we find another letter
start = i;
else // break when we don't
break;
StringBuilder sb = new StringBuilder(floorPlan); // use a string builder for ease of char replacement
for (int i = start; i < floorPlan.Length; i++) // using the start index, interate through
if (floorPlan[i] == 'V') // and replace accordingly
sb[i] = 'H';
else if (floorPlan[i] == 'H')
sb[i] = 'V';
else // breaking when we encounter a number
break;
return sb.ToString();
}