2288. 价格减免

题目

给定一个字符串列表 sentence,表示一个句子,其中每个单词可以包含数字、小写字母和美元符号 $。如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个价格。我们需要在价格的基础上减免给定的 discount%,并更新该单词到句子中。所有更新后的价格应该表示为一个恰好保留小数点后两位的数字。

示例

示例 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"

示例 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$"

提示

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

解决方案

我们需要遍历整个句子,并检查每个单词是否是一个价格。如果是价格,则计算折扣后的新价格并替换原来的价格。以下是实现步骤:

  1. 遍历句子:使用指针遍历句子,查找每个价格单词。
  2. 判断是否为价格:判断单词是否以 $ 开头,且其后跟随的字符是数字。
  3. 计算折扣:对价格进行折扣计算,并格式化为保留两位小数。
  4. 构建新句子:将处理后的句子重新拼接起来。
    很烦,很多特殊处理,像上班处理需求一样。

代码实现

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>char* discountPrices(char* sentence, int discount) {size_t len = strlen(sentence);// 为结果分配足够大的内存,防止只有一个'$'+一位数的情况导致溢出char* result = malloc(len * 3);if (result == NULL) {return NULL;}char* res_ptr = result;char* p = sentence;while (p < sentence + len) {// 查找下一个 '$' 符号char* price = strstr(p, "$");if (price) {// 将 '$' 之前的文本复制到结果中while (p < price) {*res_ptr++ = *p++;}// 检查 '$' 后的字符是否是数字if (price > sentence && *(price - 1) != ' ') {// 如果 '$' 前面的字符不是空格,将 '$' 复制到结果中并继续*res_ptr++ = *price++;p = price;continue;}if (!isdigit(*(price + 1))) {// 如果 '$' 后的字符不是数字,直接复制 '$' 并继续*res_ptr++ = *p++;continue;}// 提取并处理价格p = price + 1;double double_price = 0;char* end_of_price = p;while (isdigit(*end_of_price) || *end_of_price == '.') {end_of_price++;}// 检查价格是否紧跟非数字字符,如果是,则复制原始文本并继续if (*end_of_price != ' ' && *end_of_price != '\0') {while (price < end_of_price) {*res_ptr++ = *price++;}p = end_of_price;continue;}char original_price[20] = {0};strncpy(original_price, price, end_of_price - price);original_price[end_of_price - price] = '\0'; // 将复制的字符串以 '\0' 结尾sscanf(original_price, "$%lf", &double_price);if (double_price == 0) {// 如果价格为 0,直接复制原始文本并继续p = end_of_price;while (*p && *p != ' ') {*res_ptr++ = *p++;}continue;}// 计算折扣后的价格double_price *= (1 - discount / 100.0);// 格式化新的价格字符串char new_price[20] = {0};sprintf(new_price, "$%.2f", double_price);size_t new_price_len = strlen(new_price);// 将新的价格复制到结果缓冲区memcpy(res_ptr, new_price, new_price_len);res_ptr += new_price_len;p = end_of_price;} else {// 如果没有找到更多的价格,将剩余的文本复制到结果中while (*p) {*res_ptr++ = *p++;}break;}}*res_ptr = '\0';// 如果结果字符串长度小于等于原句子长度,将结果复制回原句子缓冲区if (strlen(result) <= len) {strcpy(sentence, result);free(result);return sentence;} else {// 如果结果过长,重新分配内存并返回新的缓冲区char* new_sentence = realloc(sentence, strlen(result) + 1);if (new_sentence == NULL) {printf("realloc failed");return NULL;}strcpy(new_sentence, result);free(result);return new_sentence;}
}

详细解析

  1. 内存分配

    • result 分配了 len * 3 的内存空间,以确保处理后的字符串有足够的空间存储。
  2. 查找价格单词

    • 使用 strstr 查找 $ 符号,判断其后是否跟随数字。
  3. 处理价格单词

    • 提取价格部分并进行折扣计算,结果保留两位小数。
    • 处理非价格部分的单词,直接复制到结果中。
  4. 字符串拼接

    • 将处理后的字符串拼接起来,并根据结果长度选择合适的缓冲区返回。

复杂度分析

  • 时间复杂度:O(n),其中 n 为字符串长度,需要遍历每个字符。
  • 空间复杂度:O(n),用于存储处理后的字符串。

结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原生APP开发的技术难点

原生APP开发是一项复杂的技术工作&#xff0c;需要掌握多种编程语言和技术。原生APP开发的技术难点主要体现在以下几个方面&#xff0c;原生APP开发是一项技术难度较高的工作&#xff0c;需要开发者具备扎实的编程基础和丰富的开发经验。北京木奇移动技术有限公司&#xff0c;专…

Pycharm怎么默认终端连接远程服务器

因为经常需要从宿舍到学校内通勤&#xff0c;期间所有连接都会中断&#xff0c;所以每次开SSH特别麻烦&#xff0c;每次终端自动切换到本地&#xff1a; 每次都得点一下Start SSH Session 想要默认终端连接远程服务器&#xff0c;需要点File->Setting->Tools->SSH T…

铺地地毯B1级防火检测 隔断板A1阻燃测试 氧指数检测

铺地地毯B1级防火检测 铺地地毯的B1级防火检测是指按照国家标准GB 8624-2012《建筑材料及制品燃烧性能分级》进行的测试&#xff0c;该标准将建筑材料及制品的燃烧性能分为A、B1、B2、B3四个等级。B1级表示难燃材料&#xff0c;具有较好的阻燃作用&#xff0c;在空气中遇明火或…

泛微E9开发 查询页面添加按钮,完成特定功能

查询页面添加按钮&#xff0c;完成特定功能 1、关联知识&#xff08;查询页面实现新增按钮&#xff09;2、功能实现2.1. 点击按钮&#xff0c;输出选中的checkbox的值2.2. 点击按钮&#xff0c;打开一个自定义对话框 3、实现方法 1、关联知识&#xff08;查询页面实现新增按钮&…

低代码结合自研项目打包发布

nginx配置 #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; }http {include mime.types;default_type applica…

麒麟Kylin | 操作系统的安装与管理

以下所使用的环境为&#xff1a;VMware Workstation 17 Pro、Kylin-Server-10-SP2-x86-Release-Build09-20210524 一、创建虚拟机 在VMware主机单击【创建新的虚拟机】 **在新建虚拟机向导中选择【自定义】&#xff0c;然后点击【下一步】 ** 保持默认选项&#xff0c;然后…

CorelDRAW Graphics Suite下载2024最新版-CorelDRAW2024详细安装步骤

CorelDRAW​​ Graphics Suite官方版是款很多用户在工作中都会使用的矢量图形设计工具。CorelDRAW Graphics Suite正式版采用量身定制的界面和无与伦比的定制功能&#xff0c;畅享无缝设计经验。并且CorelDRAW Graphics Suite还可以广泛应用于商标设计、标志制作、模型绘制、插…

LangGraph自适应RAG

LangGraph自适应RAG 介绍索引LLMsweb 搜索工具graphgraph stategraph flowbuild graph执行 介绍 自适应 RAG 是一种 RAG 策略&#xff0c;它将 (1) 查询分析 (2) 主动/自校正 RAG 结合起来。 在文章中&#xff0c;他们报告了查询分析到路由获取&#xff1a; No RetrievalSing…

采用PHP语言(医院安全不良事件上报系统源码)医院不良事件 各类事件分析、分类、处理流程

医疗安全不容忽视&#xff01; 医疗安全&#xff08;不良&#xff09;事件是指在临床诊疗活动中以及医院运行过程中&#xff0c;任何可能影响患者的诊疗结果、增加患者的痛苦和负担并可能引发医疗纠纷或医疗事故&#xff0c;以及影响医疗工作的正常运行和医务人员人身安全的因…

什么是隐马尔可夫模型?

文章目录 一、说明二、玩具HMM&#xff1a;5′拼接位点识别三、那么&#xff0c;隐藏了什么&#xff1f;四、查找最佳状态路径五、超越最佳得分对齐六、制作更逼真的模型七、收获 关键词&#xff1a;hidden markov model 一、说明 被称为隐马尔可夫模型的统计模型是计算生物学…

libdrm 2.4.107 needed because amdgpu has the highest requirement

libdrm 2.4.107 needed because amdgpu has the highest requirement 1.问题分析解决 1.问题 Message: libdrm 2.4.107 needed because amdgpu has the highest requirement Run-time dependency libdrm_intel found: YES 2.4.107 Run-time dependency libdrm_amdgpu found: Y…

Day 25:1807. 替换字符串中的括号内容

Leetcode 1807. 替换字符串中的括号内容 给你一个字符串 s &#xff0c;它包含一些括号对&#xff0c;每个括号中包含一个 非空 的键。 比方说&#xff0c;字符串 “(name)is(age)yearsold” 中&#xff0c;有 两个 括号对&#xff0c;分别包含键 “name” 和 “age” 。 你知道…

Ansible介绍

一、Ansible概述 Ansible是一款开源的自动化运维工具&#xff0c;基于Python开发&#xff0c;主要用于批量系统配置、批量程序部署、批量运行命令等功能。它集合了众多运维工具的优点&#xff0c;并通过其高度模块化的特性&#xff0c;实现了灵活、可扩展的自动化运维管理。 …

ARDUINO NRF24L01

连线 5v 3.3皆可 gnd Optimized high speed nRF24L01 driver class documentation: Optimized High Speed Driver for nRF24L01() 2.4GHz Wireless Transceiver 同时下载同一个程序 案例默认引脚ce ces &#xff0c;7&#xff0c;8 可以 修改为 9,10 安装库 第一个示例 两…

Java基础学习-方法

目录 方法基础概念 方法的格式&#xff1a; 案例&#xff1a;最简单方法的定义 案例&#xff1a;带参数的方法调用 案例&#xff1a;求圆的面积 带有返回值的方法&#xff1a; 方法注意点 方法的重载&#xff1a; ​编辑 案例&#xff1a;数组的遍历&#xff1a; 案例…

C++新特性复习1 版本11

参照来自于&#xff1a; cppreference.com 老实说&#xff0c;我是毕业不久就开始用C&#xff0c;原因就是VC&#xff0c;当时用来做界面。还好吧&#xff0c;不是觉得太难&#xff0c;起码对数学底子没有要求&#xff0c;后面偶尔也用用&#xff0c;但是整体还是C居多。现在项…

基于深度学习网络的USB摄像头实时视频采集与手势检测识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 系统架构 4.2 GoogLeNet网络简介 4.3 手势检测 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 训练过程如下&#xff1a; 将摄像头对准手势&#xff0c;然后进行…

【Kubernetes】k8s--安全机制

机制说明 Kubernetes 作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介&#xff0c; 也是外部控制的入口。所以 Kubernetes 的安全机制基本就是围绕保护 API Server 来设计的。 比如 kubectl 如果想向 …

Commons-Collections篇-CC2链分析

前言 3.1-3.2.1版本中TransformingComparator并没有去实现Serializable接口&#xff0c;是不可以被序列化的&#xff0c;所以我们重新搭建一个4.0的具有漏洞的CC环境 CC2链主要使用的和CC4一样&#xff0c;但是区别在于CC2避免了使用Transformer数组&#xff0c;没有使用Insta…

6.深度卷积神经网络

目录 1.深度卷积神经网络ALexNet 2012AlexNetAlexNet架构AlexNet与LeNet复杂度对比总结代码实现2.使用块的网络VGG 2014 image竞猜第二VGG架构进度总结代码实现3.网络中的网络NiN全连接层的问题NiN块NiN架构总结代码实现4.含并行连结的网络(GoogLeNet)2014 image竞猜第一最好…