• 博客主页:誓则盟约
  • 系列专栏:IT竞赛 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞收藏⭐评论 

2288.价格减免 【中等

题目:

句子 是由若干个单词组成的字符串,单词之间用单个空格分隔,其中每个单词可以包含数字、小写字母、和美元符号 '$' 。如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个 价格 。

  • 例如 "$100""$23" 和 "$6" 表示价格,而 "100""$" 和 "$1e5 不是。

给你一个字符串 sentence 表示一个句子和一个整数 discount 。对于每个表示价格的单词,都在价格的基础上减免 discount% ,并 更新 该单词到句子中。所有更新后的价格应该表示为一个 恰好保留小数点后两位 的数字。

返回表示修改后句子的字符串。

注意:所有价格 最多 为  10 位数字。

示例 1:

输入:sentence = "there are $1 $2 and 5$ candies in the shop", discount = 50
输出:"there are $0.50 $1.00 and 5$ candies in the shop"
解释:
表示价格的单词是 "$1" 和 "$2" 。 
- "$1" 减免 50% 为 "$0.50" ,所以 "$1" 替换为 "$0.50" 。
- "$2" 减免 50% 为 "$1" ,所以 "$1" 替换为 "$1.00" 。

示例 2:

输入:sentence = "1 2 $3 4 $5 $6 7 8$ $9 $10$", discount = 100
输出:"1 2 $0.00 4 $0.00 $0.00 7 8$ $0.00 $10$"
解释:
任何价格减免 100% 都会得到 0 。
表示价格的单词分别是 "$3"、"$5"、"$6" 和 "$9"。
每个单词都替换为 "$0.00"。

提示:

  • 1 <= sentence.length <= 10**5
  • sentence 由小写英文字母、数字、' ' 和 '$' 组成
  • sentence 不含前导和尾随空格
  • sentence 的所有单词都用单个空格分隔
  • 所有价格都是  整数且不含前导零
  • 所有价格 最多 为  10 位数字
  • 0 <= discount <= 100

分析问题:

        这道题就是在考字符串的切割和替换,我们可以按照题目要求进行模拟然后进行操作。

        首先我们将给定的字符串 sentence 根据空格进行分割,得到其中的每一个单词。随后我们遍历每个单词,如果该单词:

  • 第一个元素是‘$’。
  • 后续的元素都是数字。

        我们就进行字符串的替换操作,这里可以直接根据列表的索引来替换列表内的元素。 

       替换完成之后,我们还需要把列表转为字符串并且每个元素之间以空格分开,将其输出。

        这里需要注意的是,虽然每个元素后面都有空格分开,但是第一个元素前面和最后一个元素的后面是不需要空格的,这里的格式要注意。

代码实现:

class Solution:
    def discountPrices(self, sentence: str, discount: int) -> str:
        key=(100-discount)/100
        def pan(s:str):
            for j in s:
                if j in '0123456789':
                    continue
                else:return False
            return True
        ls=[x for x in sentence.split()]
        for i in range(len(ls)):
            if len(ls[i])>1 and ls[i][0]=='$':
                ve=ls[i][1:]
                if pan(ve):
                    kk=str('%.2f'%(int(ve)*key))
                    bp='$'+kk
                    ls[i]=bp
        s=''
        for p in range(len(ls)):
            s+=ls[p]
            if p!=len(ls)-1:s+=' '
        return s


 总结:

详细解释

  • 首先,计算折扣系数 key ,通过 (100 - discount) / 100 得到。
  • 定义一个内部函数 pan ,用于判断一个字符串是否仅由数字组成。
  • 将输入的字符串 sentence 按空格分割为一个列表 ls 。
  • 遍历列表 ls 中的每个元素,如果元素长度大于 1 且以 $ 开头,提取后续部分 ve 。
  • 通过 pan 函数判断 ve 是否仅由数字组成,如果是,则进行折扣计算,将结果格式化为保留两位小数的字符串 kk ,并拼接 $ 得到新的价格 bp ,替换原列表中的元素。
  • 最后,将处理后的列表元素重新拼接为字符串并返回。

考察内容

  • 字符串的操作,包括分割、提取子串、拼接。
  • 列表的遍历和元素修改。
  • 自定义函数的定义和使用,用于判断字符串的组成。
  • 数值的计算和格式化输出。

可以学到

  • 如何处理包含特定格式的字符串数据。
  • 如何根据条件对列表中的元素进行修改和替换。
  • 如何定义简单的辅助函数来完成特定的判断逻辑。
  • 数值的计算与格式化控制,以满足实际需求。

“你说过,人最大的敌人是自己。”——《我的前半生》

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部