def valid_parenthesis(string: str) -> bool:
n = len(string)
open_cnt = 0
close_cnt = 0
for left, right in zip(range(n), range(n-1, -1, -1)):
if string[left] in ["(", "*"]:
open_cnt += 1
else:
open_cnt -= 1
if string[right] in [")", "*"]:
close_cnt += 1
else:
close_cnt -= 1
if open_cnt < 0 or close_cnt < 0:
return False
return True