If you ignore air resistance, the player and the bullet follow paraboles. You seem to be look for the crossing point of two paraboles. That sounds like a solved problem to me.
On the other hand, just shooting and hitting the player at exactly the right spot every single time isn't much fun, so you probably want to add some randomness into it. You could also consider using a straight line for the bullet, which reduces the problem to finding the crossing point between a parabole and a straight line. Add some compensation based on distance, and some random for spreading the fire somewhat.
Theoretically, compensation should also take angle of firing into account, but you can overcompensate a bit, and the remaining difference will get lost in randomness anyway.
EDIT:
You can also cheat, and always shoot the player at a known height. That means you can pre-compute the time delay between firing and hitting a spot at the desired height at a given distance. You can also compute when the player is at that height, and how close he is to the AI then.