Bigger is Greater

说明

来自HackerRank网站的一个编程练习题。

题目

  1. 描述
    字符串的大小根据字典序进行比较。
    给定一个字符串,将其中部分字符交换位置得到一个新字符串。
    定义“下一个最大字符串”:新字符串比原字符串大,并且是所有符合要求的字符串中最小的那一个。
    例如:
    给定一个字符串“defg”,则下一个最大字符串为“degf”。
  2. 要求
    计算给定字符串的下一个最大字符串。如果不存在,返回“no answer”。
  3. 格式
    输入格式
    第一行为字符串数量,代表测试用例个数。
    接下来每一行代表一个测试用例。
    输出格式
    输出每行对应的最大字符串,如果不存在符合要求的字符串,返回“no answer”。

代码

def bigger_greater(s_str):
    # 将字符串转换为列表,每个字符为一个元素
    s_str = list(s_str)
    length = len(s_str) - 1
    # 如果字符串为字符逆序排序的,已为最大字符串,所以返回no answer
    if s_str == sorted(s_str, reverse=True):
        return "no answer"
    else:
        # 从最后一个字符开始,比较该字符与前一个字符的大小,找到比前一个字符大的字符,记录位置
        first = length
        while first > 0:
            if s_str[first] > s_str[first - 1]:
                break
            else:
                first -= 1
    # 再次从最后一个字符开始,,比较该字符与first-1位置字符的大小,找到比该字符大的字符,记录位置
    second = length
    while s_str[second] <= s_str[first - 1]:
        second -= 1
    # 交换两次找到的位置的字符
    s_str[first - 1], s_str[second] = s_str[second], s_str[first - 1]
    # 交换之后,将第一次找到的字符位置开始到字符串结尾位置的子字符串替换为排序后的字符串。
    s_str[first:] = sorted(s_str[first:])
    return "".join(s_str)


if __name__ == '__main__':

    nums = int(input())
    result = list()

    for _ in range(nums):
        src_string = input()
        result.append(bigger_greater(src_string))

    for ele in result:
        print(ele)

结果示例

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值