从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()
相关推荐
焦糖玛奇朵婷几秒前
盲盒小程序:开发视角下的功能与体验
java·大数据·jvm·算法·小程序
崇山峻岭之间8 分钟前
Matlab学习记录35
开发语言·学习·matlab
QiZhang | UESTC14 分钟前
【豆包生成,写项目看】探寻最优学习路径:线性回归从框架补全到从零手写
学习·算法·线性回归
西西学代码18 分钟前
aa---(12)
笔记
航Hang*20 分钟前
第3章:复习篇——第1节:创建和管理数据库---题库
数据库·笔记·sql·学习·期末·复习
IT=>小脑虎22 分钟前
Python爬虫零基础学习知识点详解【基础版】
爬虫·python·学习
做萤石二次开发的哈哈1 小时前
萤石开放平台 萤石可编程设备 | 设备 Python SDK 使用说明
开发语言·网络·python·php·萤石云·萤石
降临-max1 小时前
JavaWeb企业级开发---Mybatis
java·开发语言·笔记·学习·mybatis
知乎的哥廷根数学学派1 小时前
基于多物理约束融合与故障特征频率建模的滚动轴承智能退化趋势分析(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习
wifi chicken1 小时前
Linux 内核开发之单链表的增删查改详解
linux·数据结构·链表