We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
def _check(a, b):
print(a, b)
dp=[[ False for _ in range(len(a)+1) ] for _ in range(len(b)+1)]
dp[0][0]=True
for j in range(1, len(a)+1):
if a[j-1].islower() and dp[0][j-1]:
dp[0][j]=True
else:
break
for i in range(1, len(b)+1):
for j in range(1, len(a)+1):
if a[j-1]==b[i-1]:
dp[i][j]=dp[i-1][j-1]
elif a[j-1].upper()==b[i-1]:
dp[i][j]=dp[i-1][j-1] or dp[i][j-1]
elif a[j-1].islower():
dp[i][j]=dp[i][j-1]
return dp[-1][-1]
def _remove_unused(a, b):
_set_b=set(b)
return "".join(list([x for x in a if x.isupper() or x.upper() in _set_b]))
def _build_dp(a):
_dp = collections.defaultdict(int)
for _, x in enumerate(a):
_dp[x.upper()]+=1
return _dp
def _precheck_check_dp(dp_a, dp_b):
for x in dp_b:
if dp_a[x] < dp_b[x]:
return False
return True
def abbreviation(a, b):
a=_remove_unused(a, b)
if len(a)
if not _precheck_check_dp(_build_dp(a),_build_dp(b)):
return "NO"
if _check(a, b):
return "YES"
else:
return "NO"
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Abbreviation
You are viewing a single comment's thread. Return to all comments →
def _remove_unused(a, b): _set_b=set(b) return "".join(list([x for x in a if x.isupper() or x.upper() in _set_b]))
def _build_dp(a): _dp = collections.defaultdict(int) for _, x in enumerate(a): _dp[x.upper()]+=1 return _dp
def _precheck_check_dp(dp_a, dp_b): for x in dp_b: if dp_a[x] < dp_b[x]: return False return True
def abbreviation(a, b): a=_remove_unused(a, b) if len(a) if not _precheck_check_dp(_build_dp(a),_build_dp(b)): return "NO" if _check(a, b): return "YES" else: return "NO"