factor common prefix strings out of alternation

R=rsc
CC=re2-dev
http://codereview.appspot.com/1665049
diff --git a/re2/regexp.cc b/re2/regexp.cc
index 7b21fbe..e988f8a 100644
--- a/re2/regexp.cc
+++ b/re2/regexp.cc
@@ -65,7 +65,7 @@
 int Regexp::Ref() {
   if (ref_ < kMaxRef)
     return ref_;
-  
+
   MutexLock l(&ref_mutex);
   return ref_map[this];
 }
@@ -189,6 +189,9 @@
 }
 
 Regexp* Regexp::ConcatOrAlternate(RegexpOp op, Regexp** sub, int nsub, ParseFlags flags) {
+  if (nsub == 1)
+    return sub[0];
+
   if (nsub > kMaxNsub) {
     // Too many subexpressions to fit in a single Regexp.
     // Make a two-level tree.  Two levels gets us to 65535^2.
@@ -574,7 +577,7 @@
   }
 
   for (;;) {
-    
+
     iterator it = ranges_.find(RuneRange(r + 1, Runemax));
     if (it == end())
       break;