HackerRank Weighted Uniform Strings
https://www.hackerrank.com/challenges/weighted-uniform-string/problem
提出
8/32 test cases failed :(
code: python
#!/bin/python3
import math
import os
import random
import re
import sys
import string
#
# Complete the 'weightedUniformStrings' function below.
#
# The function is expected to return a STRING_ARRAY.
# The function accepts following parameters:
# 1. STRING s
# 2. INTEGER_ARRAY queries
#
def weightedUniformStrings(s, queries):
# Write your code here
chars = 0 * 26
for i, char in enumerate(list(string.ascii_lowercase)):
charsi = s.count(char)
sums = set()
for i in range(26):
for j in range(charsi):
sums.add((i+1)* (j+1))
results = []
for i in queries:
if i in sums:
results.append("Yes")
else:
results.append("No")
return results
if __name__ == '__main__':
fptr = open(os.environ'OUTPUT_PATH', 'w')
s = input()
queries_count = int(input().strip())
queries = []
for _ in range(queries_count):
queries_item = int(input().strip())
queries.append(queries_item)
result = weightedUniformStrings(s, queries)
fptr.write('\n'.join(result))
fptr.write('\n')
fptr.close()
解答
code: python
#!/bin/python3
import math
import os
import random
import re
import sys
from collections import Counter
#
# Complete the 'weightedUniformStrings' function below.
#
# The function is expected to return a STRING_ARRAY.
# The function accepts following parameters:
# 1. STRING s
# 2. INTEGER_ARRAY queries
#
def to_int(s):
return ord(s) - 96
def weightedUniformStrings(s, queries):
weights = set()
count = 1
weights.add(to_int(s0))
for i in range(1, len(s)):
if si == si-1:
count += 1
else:
count = 1
weights.add(to_int(si) * count)
return 'Yes' if q in weights else 'No' for q in queries
if __name__ == '__main__':
fptr = open(os.environ'OUTPUT_PATH', 'w')
s = input()
queries_count = int(input().strip())
queries = []
for _ in range(queries_count):
queries_item = int(input().strip())
queries.append(queries_item)
result = weightedUniformStrings(s, queries)
fptr.write('\n'.join(result))
fptr.write('\n')
fptr.close()
テーマ
#ascii
提出
code: python
#!/bin/python3
import math
import os
import random
import re
import sys
#
# Complete the 'weightedUniformStrings' function below.
#
# The function is expected to return a STRING_ARRAY.
# The function accepts following parameters:
# 1. STRING s
# 2. INTEGER_ARRAY queries
#
# abccddde
def weightedUniformStrings(s, queries):
# Write your code here
d = {}
for i in range(97, 123):
dchr(i) = i-96
res = []
res.append(d[s0])
for i in range(1, len(s)):
if si == si-1:
res.append(res-1 + d[si])
else:
res.append(d[si])
res = set(res)
ans = []
for q in queries:
if q in res:
ans.append("Yes")
else:
ans.append("No")
return ans
if __name__ == '__main__':
fptr = open(os.environ'OUTPUT_PATH', 'w')
s = input()
queries_count = int(input().strip())
queries = []
for _ in range(queries_count):
queries_item = int(input().strip())
queries.append(queries_item)
result = weightedUniformStrings(s, queries)
fptr.write('\n'.join(result))
fptr.write('\n')
fptr.close()
提出
code: python
#!/bin/python3
import math
import os
import random
import re
import sys
from collections import Counter
#
# Complete the 'weightedUniformStrings' function below.
#
# The function is expected to return a STRING_ARRAY.
# The function accepts following parameters:
# 1. STRING s
# 2. INTEGER_ARRAY queries
#
def to_int(s):
return ord(s) - 96
def weightedUniformStrings(s, queries):
# abccddde
# Counter({'d': 3, 'c': 2, 'a': 1, 'b': 1, 'e': 1})
numbers = set()
for k, v in Counter(s).items():
for i in range(1, v+1):
numbers.add(to_int(k)*i)
result = []
for query in queries:
if query in numbers:
result.append("Yes")
else:
result.append("No")
return result
if __name__ == '__main__':
fptr = open(os.environ'OUTPUT_PATH', 'w')
s = input()
queries_count = int(input().strip())
queries = []
for _ in range(queries_count):
queries_item = int(input().strip())
queries.append(queries_item)
result = weightedUniformStrings(s, queries)
fptr.write('\n'.join(result))
fptr.write('\n')
fptr.close()