Python程序员面试算法宝典---解题总结: 第5章 字符串 5.17 如何求解字符串中字典序最大的子序列

本文是Python程序员面试的算法解析,聚焦于字符串处理。通过实例解析如何找到字符串中字典序最大的子序列,帮助求职者巩固字符串相关算法知识,提升面试竞争力。
摘要由CSDN通过智能技术生成
# -*- coding: utf-8 -*-

'''
Python程序员面试算法宝典---解题总结: 第5章 字符串 5.17 如何求解字符串中字典序最大的子序列

题目:
给定一个字符串,求串中字典序最大的子序列。字典序最大的子序列是这样构造的:
给定字符串a0a1...an-1,首先在字符串a0a1...an-1中找到值最大的字符ai,
然后在剩余字符串ai+1..an-1中找到值最大的字符aj然后在剩余的aj+1...an-1
中找到值最大的字符ak...直到字符串的长度为0,则aiajak...即为答案。


分析:
最简单的方式,遍历字符串,记录最大的字符,然后对剩余字符串
进行遍历,记录最大字符,直到字符串为空。
或者自己设计一个排序算法,记录每个字符的下标,
排序算法按照字符的值从大到小排序。

关键:
1 书上解法
逆序遍历字符串。根据题目的要求字符串的最后一个字符必定在所求结果中。
那么继续从后向前查找到第一个大于刚才最后一个字符的元素加入到结果字符串尾部,
以此类推,得到结果字符串,最后在逆序即可

2 没有想到
是因为没有考虑到最后一个元素必然在结果列表中,
然后逆序寻找即可

参考:
Python程序员面试算法宝典
'''

def getLargestSub(string):
    if not string:
        return
    size = len(string)
    i = size - 2
    charSet = [string[size - 1]]
    while i >= 0:
        while i >= 0 and ord(string[i]) < ord(charSet[-1]):
            i -= 1
        if i < 0:
            break
        charSet.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值