# Description:

 Find the longest successive exclamation marks and question marks combination in the string. A successive exclamation marks and question marks combination must contains two part: a substring of "!" and a substring "?", they are adjacent. 
 
 If more than one result are found, return the one which at left side; If no such a combination found, return `""`.

# Examples

```
find("!!") === ""
find("!??") === "!??"
find("!?!!") === "?!!"
find("!!???!????") === "!!???"
find("!!???!?????") === "!?????"
find("!????!!!?") === "????!!!" 
find("!?!!??!!!?") === "??!!!"
```

# Note
Please don't post issue about difficulty or duplicate. Because:
>[That's unfair on the kata creator. This is a valid kata and introduces new people to javascript some regex or loops, depending on how they tackle this problem.  --matt c](https://www.codewars.com/kata/remove-exclamation-marks/discuss#57fabb625c9910c73000024e)

Source: codewars | Difficulty: EASY
Tags: Fundamentals

Starter code: def find(s):
	

Solutions:
import re

def find(stg):
	matches = re.findall('(!+|\\?+)', stg)
	return max((f'{a}{b}' for (a, b) in zip(matches, matches[1:])), key=len, default='')


from itertools import groupby

def find(s):
	L = [k * len(list(v)) for (k, v) in groupby(s)]
	return max((x + y for (x, y) in zip(L, L[1:])), key=len, default='')


import re

def find(s):
	matches = [s for (s, _) in re.findall('((.)\\2*)', s)]
	return max((a + b for (a, b) in zip(matches, matches[1:])), key=len, default='')


import re

def find(s):
	h1 = re.findall('!+\\?+', s)
	h2 = re.findall('\\?+!+', s)
	return max(h1 + h2, key=lambda x: (len(x), -s.find(x)), default='')


import re
find = lambda s: max(re.findall('!+\\?+', s) + re.findall('\\?+!+', s), key=lambda x: (len(x), -s.find(x)), default='')


def find(s):
	if s == '' or '!' not in s or '?' not in s:
		return ''
	s += ' '
	counts = []
	curr = s[0]
	count = 0
	for i in s:
		if i == curr:
			count += 1
		else:
			counts.append(count)
			count = 1
			curr = i
	n = []
	for i in range(len(counts) - 1):
		n.append(counts[i] + counts[i + 1])
	x = n.index(max(n))
	a = sum(counts[:x])
	return s[a:a + counts[x] + counts[x + 1]]


import re

def find(s):
	return max(re.findall('\\!+\\?+', s) + re.findall('\\?+\\!+', s), key=lambda x: (len(x), -s.index(x)), default='')


import re

def find(s):
	x = []
	for g in re.finditer('\\?+!+', s):
		x.append((len(g[0]), -g.start(), g[0]))
	for g in re.finditer('!+\\?+', s):
		x.append((len(g[0]), -g.start(), g[0]))
	return max(x)[-1] if x else ''


from itertools import *

def find(s):
	r = ''
	for i in range(len(s)):
		for j in range(i, len(s) + 1):
			g = [k for (k, g) in groupby(s[i:j])]
			if len(g) == 2:
				if j - i > len(r):
					r = s[i:j]
	return r


from itertools import groupby

def find(s):
	(a, b) = ('', 0)
	m = 0
	r = ''
	for (c, g) in groupby(s):
		n = len(list(g))
		if b + n > m and b:
			r = a * b + c * n
			m = b + n
		(a, b) = (c, n)
	return r