トピック 1:
タイトル 説明
入力文字列配列を解析し、文字列内のタイムスタンプ情報を抽出し、文字列をタイムスタンプで並べ替えて、コンソールに出力します。
説明を入力してください
1 行目は配列のサイズを指定し、2 行目から n 行目までは各行が独立した文字列で、n はサイズの値です。
各行の文字列は、「/-:」と文字と数字で構成されています。文字列内のタイムスタンプの位置は不明です。タイムスタンプの形式は、2019-01-01T07:30:20 で、1 月 1 日を意味します。 , 2019. 7:30:20 は 24 時間形式です。
出力の説明
入力文字列をタイムスタンプの小さい順に並べ替えた後、出力します。次の規則に従います: 1. タイムスタンプ情報が同じ場合は、文字列の長さに応じて小さい順にソートします;
2. 長さが同じ場合は、先頭文字から ASCII コード値を比較し、小さいものから大きいものへ並べ替える; 3. 2 つの場合 2 つの文字列がまったく同じである場合、出力する必要があるのは 1 つだけです。
例 1
入力5
my/2019-01-01T09:00:01
my/2019-01-01T09:00:01
abc/2018-12-24T08:00:00/test/you
1/2018-12-24T08:00:00/テスト/テスト
1 123/2018-12-24T08:00:09/テスト/私出力
1/2018-12-24T08:00:00/test/Test1
abc/2018-12-24T08:00:00/test/you
123/2018-12-24T08:00:09/test/me
my/2019-01 -01T09:00:01
size = int(input())
timestamps = []
for _ in range(size):
timestamps.append(input())
def custom_sort(timestamp):
parts = timestamp.split("/")
ts_index = None
for i, part in enumerate(parts):
if "-" in part and "T" in part:
ts_index = i
break
if ts_index is not None:
ts = parts[ts_index]
return (ts, len(timestamp), timestamp)
else:
return (timestamp, len(timestamp), timestamp)
sorted_timestamps = sorted(timestamps, key=custom_sort)
unique_timestamps = []
for ts in sorted_timestamps:
if ts not in unique_timestamps:
unique_timestamps.append(ts)
for ts in unique_timestamps:
print(ts)
1/2018-12-24T08:00:00/test/Test1
abc/2018-12-24T08:00:00/test/you
123/2018-12-24T08:00:09/test/me
my/2019-01-01T09:00:01
トピック 2:
タイトル説明
すべて小文字の非常に長い英単語の列がありますが、k 以上の長さの単語が合計で何回出現するかを数え、最も出現頻度の高い単語を出力してください。
解が複数ある場合は長さが小さい方を出力し、長さが同じ場合は辞書順が小さい方を出力します。
入力の説明
タイトルにあるように、最初の行は整数 K です。
2 行目は文字列 str で、小文字のみが含まれており、長さは指定されていません。
k<=50
len(str)<=100000
出力の説明
1 行に 1 つの文字列。これは、長さが h 以上で頻度が最も高い文字列を意味し、解がない場合は -1 が出力されます。
例1
输入
2
abababababa出力
ab
import collections
# 输入K和字符串str
K = int(input())
str = input()
# 获取字符串的长度
str_length = len(str)
# 初始化结果列表
words = []
# 遍历字符串,切割成所有长度大于等于K的子串
for i in range(str_length):
for j in range(i + K, str_length + 1):
substr = str[i:j]
words.append(substr)
# 创建一个字典来存储单词和它们的出现次数
word_count = collections.defaultdict(int)
# 统计长度大于等于K的单词出现次数
for word in words:
word_count[word] += 1
# 找到出现频率最高的单词
if word_count:
print(min(word_count, key=lambda x: (-word_count[x], len(x), x)))
else:
print(-1)
ab
トピック 3:
タイトル説明
バイナリ ツリーのルート ノード ルートを考えると、ツリーのノード値はすべて 0 ~ 9 の数値であり、ルート ノードからリーフ ノードまでの各パスは数値で表すことができます。
1 この質問のパスは、ツリーのルート ノードからリーフ ノードまでのノードとして定義されています
2 リーフ ノードとは、子ノードのないノードを指します 3.
パスは親ノードから子ノードへのみ進むことができます子ノードからではなく、親ノード
4 へのノードの総数は n です
例:
入力
1
↙ ↘
2 3
出力
25
説明:
たとえば、ルートノードからリーフノードへのパスが 1->2->3 である場合、このパスは 123 に置き換えられます。ルート ノードからリーフ ノードまでのすべてのパスによって表される数値の合計を求めます。たとえば、このバイナリ ツリーにはルート ノードからリーフ ノードへの合計 2 つのパス 1->2 があります。ルート ノードからリーフ ノードへのパスを置き換えるために数値 12 が使用されます。1->3 は次のように置き換えられます。数字は 13 なので、答えは 12+13=25 となります。
# 原题是核心代码模式
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def sumNumbers(root):
def dfs(node, current_sum):
if not node:
return 0
# 计算当前路径上的数字之和
current_sum = current_sum * 10 + node.val
# 如果是叶子节点,返回当前路径的数字之和
if not node.left and not node.right:
return current_sum
# 否则,递归计算左子树和右子树的路径数字之和,并相加
return dfs(node.left, current_sum) + dfs(node.right, current_sum)
return dfs(root, 0)
# 创建示例二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
# 计算根节点到叶子节点的所有路径表示的数字之和
result = sumNumbers(root)
print(result)
25