您的位置:首页 > 新闻 > 资讯 > 惠州市人民政府门户网站_企业建站工具_湖南正规关键词优化首选_百度客服投诉中心

惠州市人民政府门户网站_企业建站工具_湖南正规关键词优化首选_百度客服投诉中心

2024/12/23 12:28:01 来源:https://blog.csdn.net/weixin_43837522/article/details/144654516  浏览:    关键词:惠州市人民政府门户网站_企业建站工具_湖南正规关键词优化首选_百度客服投诉中心
惠州市人民政府门户网站_企业建站工具_湖南正规关键词优化首选_百度客服投诉中心

在这里插入图片描述

字符划分逻辑回顾

在划分字母区间时,确保每个字母在不同的片段中最多出现一次是关键。我们通过记录每个字符的最后出现位置来决定划分的边界。

分析划分过程的调整

  • 目标: 遇到一个字符的最后出现位置后,尽可能早地结束当前片段,同时确保片段内的所有字符都出现在该片段中。

示例分析

以字符串 "eccbdbdec" 为例,下面是如何划分它以获得更多片段的步骤:

  1. 记录字符最后出现位置:

    • 'e': 6
    • 'c': 8
    • 'b': 5
    • 'd': 7
  2. **遍历字符串 **:

    • 从头开始,维护一个当前片段的结束位置。
具体步骤:
  1. 初始化变量:

    • last_index = {'e': 6, 'c': 8, 'b': 5, 'd': 7}
    • result = []
    • j = 0 (当前片段结束位置)
    • anchor = 0 (当前片段开始位置)
  2. 遍历字符串:

    • i = 0 ('e'):
      • 更新 j: j = max(0, 6)j = 6
    • i = 1 ('c'):
      • 更新 j: j = max(6, 8)j = 8
    • i = 2 ('c'):
      • j 不变,仍然是 8
    • i = 3 ('b'):
      • 更新 j: j = max(8, 5)j = 8
    • i = 4 ('d'):
      • 更新 j: j = max(8, 7)j = 8
    • i = 5 ('b'):
      • j 不变
    • i = 6 ('d'):
      • j 不变
    • i = 7 ('e'):
      • j 不变
    • i = 8 ('c'):
      • 在这里,达到 i == j 的条件,记录当前区间。

划分结果

要想获得更多片段,可以调整逻辑,在发现末尾字母再一次出现时,就将当前片段分开。例如:

  • 当到达 'd' (索引4) 时,分隔为 'ecc''bdb'(从0235)。
  • 同理,可以将'd''e'或者'c'放在不同的区间。

正确的划分逻辑

最终,我们还是需要确保一个字母在相应的片段内能够得到完整的呈现,而所形成的片段也需要符合条件。

代码实现(示例)

def partition_labels(s):# 最后出现位置last_index = {char: i for i, char in enumerate(s)}result = []j = 0anchor = 0for i, char in enumerate(s):j = max(j, last_index[char])  # 更新当前片段的结束位置if i == j:  # 达到当前片段结束位置result.append(s[anchor:j + 1])  # 记录当前结果anchor = i + 1  # 更新下个片段开始位置return result# 示例
s = "eccbdbdec"
print(partition_labels(s))  # 应输出划分结果

在 Python 中,当我们使用切片 (s[anchor:j + 1]) 时,切片的定义如下:

切片格式是 s[start:end],其中 start 包含在切片中,而 end 不包含在切片中。这意味着切片将包含从索引 start 开始到 end-1 的字符。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com