美文网首页
Python编程题15--RGB字符串排序

Python编程题15--RGB字符串排序

作者: wintests | 来源:发表于2020-10-25 07:33 被阅读0次

题目

给定一个字符串,里面只包含 R、G、B 三个字符,请给这个字符串排序,要求最终结果的顺序是所有R在最前面,所有G在中间,所有B在最后。

例如:

给定一个字符串GBRRGBGG,排完序后:RRGGGGBB。

实现思路1

  • 利用字符串中 count() 方法,统计出 R、G、B 三个字符的个数
  • 根据统计三个字符的个数,按RGB顺序的要求拼接出最终结果

代码实现

def string_sort(s):
    count_R = s.count("R")
    count_G = s.count("G")
    count_B = s.count("B")
    return "{}{}{}".format(count_R * "R", count_G * "G", count_B * "B")

s = "GBRRGBGG"
print("原来的字符串:{}, 排序后的字符串:{}".format(s, string_sort(s)))

实现思路2

  • 设置三个变量 left、current、right,其中 left 用于记录左侧 "R" 最右边的下一个元素位置,right 用于记录右侧 "B" 最左边的上一个元素位置,current 则用于记录当前操作的元素位置
  • 因为 Python 中字符串不可变,所以这里转换为list列表来处理
  • 使用 while 循环,判断条件为 current 小于等于 right,如果 current 大于 right ,那么结束循环
  • 如果 current 对应的元素为 "R",那么把该元素放到 left 位置,在这里与 left 对应的元素交换即可,交换之后,left、current 均加1
  • 如果 current 对应的元素为 "G",那么该元素不需要移动,直接让 current 加1
  • 如果 current 对应的元素为 "B",那么把该元素与 right 对应的元素交换,交换之后 right 减去1,而 current 保持不变(因为与 right 对应元素交换后,这个元素可能是 "R",后续循环可能还需要处理)
  • 对结果进行处理,通过 join() 方法将列表转换为字符串

代码实现

def string_sort(s):
    left, current, right = 0, 0, len(s)-1
    str_list = [i for i in s]
    while current <= right:
        if str_list[current] == "R":
            str_list[left], str_list[current] = str_list[current], str_list[left]
            left += 1
            current += 1
        elif str_list[current] == "G":
            current += 1
        elif str_list[current] == "B":
            str_list[current], str_list[right] = str_list[right], str_list[current]
            right -= 1
    return "".join(str_list)

s = "GBRRGBGG"
print("原来的字符串:{}, 排序后的字符串:{}".format(s, string_sort(s)))

更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

相关文章

  • Python编程题15--RGB字符串排序

    题目 给定一个字符串,里面只包含 R、G、B 三个字符,请给这个字符串排序,要求最终结果的顺序是所有R在最前面,所...

  • Python Vs Perl6

    zip() Python Perl6 按照日期字符串排序 给定一个列表,按照日期字符串进行排序: Python 输...

  • 编程笔试题(二)插入排序

    继续我们的简单排序之旅。 题目 看一下这道编程题。 使用python对list中的元素进行插入排序,并编写unit...

  • python中进行字符串排序

    python中进行字符串排序 python中没有直接的方法对字符串进行排序,原因是字符串类型是不允许直接修改元素的...

  • Rust语言编程实例100题-045

    Rust语言编程实例100题-045 题目:在第39题和42题已经练习过选择排序,插入排序,冒泡排序。今天再来练习...

  • C语言编程 C Language Programming - 0

    编程题0012 (from Programming Teaching Assistant (PTA)) 冒泡排序 ...

  • 第五周学习计划

    本周学习python相关内容,练习sql题,练习python编程题,尽量跟进度Õ_Õ

  • Python 几种排序函数探究对比分析

    排序是日常编程处理中最常用的功能之一。python 排序有两层内容含义,一层是 python 本身提供的排序函数,...

  • 编程笔试题(三)二分查找

    题目 看一下这道编程题。 使用python对已排序的list中的元素进行二分查找,如果找到返回True,否则返回F...

  • Rust语言编程实例100题-042

    Rust语言编程实例100题-042 题目:在第39题已经练习过插入排序和选择排序。今天来练习下另一种排序——冒泡...

网友评论

      本文标题:Python编程题15--RGB字符串排序

      本文链接:https://www.haomeiwen.com/subject/wvhhdktx.html