从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()
相关推荐
y = xⁿ6 小时前
DeepSeek Harness 学习日记:关于Agent接口,工具调用的底层实现
android·java·学习
顶点多余7 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI情绪识别开源8 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
lupai8 小时前
手机在网状态接口实测效果与质量评估
大数据·python·智能手机·api接口
罗西的思考8 小时前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
hahaha60169 小时前
HLS高层次综合设计技巧--C++类和模板
图像处理·人工智能·算法·计算机视觉
HugoStudio_SWAN9 小时前
【擦除重绘】C++ 控制台动画:弹跳 Logo DVD 屏保效果
开发语言·c++·学习·程序人生
荷蒲9 小时前
【小白量化Qbuddy】用AI设计miniQMT指标公式计算量化平台
人工智能·python·机器人
阿童木写作9 小时前
跨境电商图片翻译工具,批量翻译视频字幕一键抠图
人工智能·python·音视频
多弗朗皮卡丘10 小时前
算法详解4:买卖股票的最佳时机系列(上)
算法