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
,替换原列表中的元素。 - 最后,将处理后的列表元素重新拼接为字符串并返回。
考察内容:
- 字符串的操作,包括分割、提取子串、拼接。
- 列表的遍历和元素修改。
- 自定义函数的定义和使用,用于判断字符串的组成。
- 数值的计算和格式化输出。
可以学到:
- 如何处理包含特定格式的字符串数据。
- 如何根据条件对列表中的元素进行修改和替换。
- 如何定义简单的辅助函数来完成特定的判断逻辑。
- 数值的计算与格式化控制,以满足实际需求。