gpt4 book ai didi

擅长处理临时数据的结构——栈

转载 作者:撒哈拉 更新时间:2024-09-14 18:23:11 57 4
gpt4 key购买 nike

目录
  • 实践1 —— 从字符串中移除星号


栈和数组存储数据的方式一样,它们都只是元素的列表。不同之处在于栈的以下3个限制:

  • 数据只能从栈末插入;
  • 数据只能从栈末删除;
  • 只能读取栈的最后一个元素。

栈和队列、链表...一样,都是抽象的数据结构, 何为抽象数据结构? 它指一种数据组织的形式,它不关注具体的实现细节,而是专注于数据的逻辑结构和操作。在计算机科学中,抽象的数据结构定义了数据的组织方式和允许的操作,但不指定如何在计算机中实现这些操作的具体细节.

简而言之,栈在很多编程语言中没有具体的实现,你可以在数组的基础,自己给数组加上前文提的三个使用限制、使用方式,那么这个数组就是你想要的栈了.

实践1 —— 从字符串中移除星号

题目要求 。

解题思路: 考虑使用栈(stack)来帮助解决这个问题,因为栈的后进先出(LIFO)特性非常适合这个需求.

然后考虑*号的两种位置:

  • *a
  • a*

分别对应下面两种栈处理流程。先看 A * 位置的处理流程: 读取第一个坐标, 读取第二个坐标,pop掉栈里的元素 读取第三个坐标, 读取第四个坐标, 。

再看 * A 位置的处理流程: 第一次读取, 。

第二次读取, 。

第三次读取,flag -= 1 。

第四次读取, 。

第五次读取, 。

code参考: 代码不是很优化,只是实现了这个功能.

class Solution:
    def removeStars(self, s: str) -> str:
        index_letters = []
        flag = 0
        for i, v in enumerate(s):
            if v == "*":
                if len(index_letters) == 0:
                    flag += 1
                if len(index_letters) >= 1:
                    flag -= 1
                    index_letters.pop()
            if v != "*":
                index_letters.append(v)

            if len(index_letters) >= 1:
                for i in range(flag):
                    if (len(index_letters) != 0):
                        index_letters.pop()
                        flag -= 1

        newStr = ""
        for v1 in index_letters:
            newStr += v1
        return newStr


s = Solution()
s2 = "leet**cod*e"
s1 = "**o*d*ety"
print(s.removeStars(s2))

最后此篇关于擅长处理临时数据的结构——栈的文章就讲到这里了,如果你想了解更多关于擅长处理临时数据的结构——栈的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com