-2

I just started learning about formal lang and automata theory, and recently learned about regex, so I don't know any complicated symbols, so please stick with basic symbols.

The question is: Write a regex for the following language over {0,1} that is a set of all odd length strings that contain exactly two 0's.

I've got the first part finished (the odd part), it should be:

(0+1)[(0+1)(0+1)]* ( + is the same as | (or) I believe, we learnt it as +)

However, when I think about having exactly two 0's it gets really messed up. I can only see that I can use * with 1 only since # of 0's are limited to 2. But if i do (11)* , I can't get the permutation of 0's inside the 1's. (e.g. can't get 10101 with (11)*).

What I know:

  1. Only 1's can use *
  2. In the regex only two 0's will be used
  3. The way to make odd length is to add an odd length to an even length (even length needs to have empty string within it's set)
  4. Odd length should not use * since 2 odd = even, so only even length can use *

For possible hints or answer, please use 0,1,+/|,*,(,) only. Some other expressions I will not be able to understand.

LarsChung
  • 201
  • 2
  • 4
  • 8

1 Answers1

3

Hint. You did a good start, except maybe for (4). Note that $(11)^*1$ is a regular expression for the set of words of odd length (on the alphabet $\{1\}$). Does that help you?

Hint 2. Consider a word in your language. You know you have exactly two $0$ and hence your word is of the form $1^i01^j01^k$ for some $i, j, k \geqslant 0$ such that $i + j + k$ is an odd number.

Answer $(11)^*10(11)^*10(11)^*1 + (11)^*10(11)^*0(11)^* + (11)^*0(11)^*10(11)^* + (11)^*0(11)^*0(11)^*1$

J.-E. Pin
  • 6,219
  • 21
  • 39