从0开始学算法——第四天(题目参考答案)

写在开头的话

以下是我对于这四道题目的解答(python版),其中代码部分有一部分借助了AI(我说思路AI写的代码哈,因为这样子还不用手打注释),肯定不是最优解,有更好的方法欢迎大家留言,我们共同进步!

第一题解答------字符串

python 复制代码
import sys

def count_different_strings():
    """
    统计不同字符串的数量
    
    主要思想:
    1. 使用Python的内置集合(set)数据结构来存储不同的字符串
    2. 集合会自动去重,相同字符串只会保留一个
    3. 遍历所有输入字符串,将它们添加到集合中
    4. 集合的大小就是不同字符串的数量
    """
    # 读取所有输入数据
    data = sys.stdin.read().split()
    
    # 第一个元素是字符串数量N
    n = int(data[0])
    
    # 从第二个元素开始是N个字符串
    strings = data[1:n+1]
    
    # 使用集合来去重
    # 集合(set)是Python中的一种数据结构,它只存储不重复的元素
    # 当我们向集合中添加元素时,如果元素已经存在,集合不会重复添加
    unique_strings = set()
    
    # 遍历所有字符串并添加到集合中
    for s in strings:
        unique_strings.add(s)
        # 集合会自动处理重复的字符串
    
    # 输出不同字符串的数量,即集合的大小
    print(len(unique_strings))

if __name__ == "__main__":
    count_different_strings()

第二题解答------括号串

python 复制代码
def is_valid_parentheses(n, s):
    # 如果长度是奇数,不可能是合法的括号序列(空串除外)
    if n % 2 != 0:
        return "No"
    
    stack = []
    for ch in s:
        if ch == '(':
            stack.append(ch)
        elif ch == ')':
            if not stack:  # 栈为空,无法匹配
                return "No"
            stack.pop()  # 匹配一个左括号
        else:
            # 题目保证只包含括号,所以这里不会执行,但为了完整性可以加上
            return "No"
    
    # 遍历结束后,栈为空则说明全部匹配
    return "Yes" if not stack else "No"

if __name__ == "__main__":
    n = int(input())
    s = input().strip()
    print(is_valid_parentheses(n, s))

第三题解答------情景

python 复制代码
import sys

def main():
    data = sys.stdin.read().strip().split()
    if not data:
        return
    n = int(data[0])
    a = list(map(int, data[1:1 + n]))
    stack = []
    for x in a:
        if x != 0:
            stack.append(x)
        else:
            if stack:
                stack.pop()
    # 逆序输出栈中元素
    for i in range(len(stack) - 1, -1, -1):
        sys.stdout.write(str(stack[i]) + '\n')

if __name__ == "__main__":
    main()

第四题解答------哈希

python 复制代码
def main():
    import sys
    input = sys.stdin.read
    data = input().split()
    
    q = int(data[0])
    s = set()
    idx = 1
    results = []
    
    for _ in range(q):
        op = data[idx]
        x = int(data[idx + 1])
        idx += 2
        
        if op == 'I':
            s.add(x)
        elif op == 'Q':
            if x in s:
                results.append("Yes")
            else:
                results.append("No")
    
    sys.stdout.write("\n".join(results))

if __name__ == "__main__":
    main()
相关推荐
油丶酸萝卜别吃5 小时前
前端转全栈学习路线
前端·学习
江畔柳前堤5 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Doraemomo5 小时前
数据结构-环形链表
java·数据结构·链表
Forever Nore6 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
北斗落凡尘7 小时前
LangGraph 入门实战(2)
python·langchain
ttod_qzstudio8 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
罗西的思考8 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
GlueNa2SiO38 小时前
第十八章 Linux故障排查与恢复
linux·服务器·笔记·学习
蛋先生DX9 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
jufeng13079 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 1 篇】
人工智能·python·架构·agent