力扣题目超出时间限制,String和StringBuilder

2182. 构造限制重复的字符串

简单说下遇到的问题,代码就不细说了(在最后),遇到只有超出时间限制的问题,然后看那案例真的无语,但再怎么计算我代码的时间复杂度,大概也就是O(n),就这怎么就超出时间复杂度呢?

直到我把String换成StringBuilder类型,直接就通过了,甚至还超过百分之八十多的人。问题就出在String了,接着我了解了两个方式的区别。

在Java中,字符串的拼接可以通过多种方式实现,但其中最常见的是使用字符串连接操作符 + 或者使用 StringBuilder类。

String的'+'连接:

这种方式会创建新的字符串对象,每个连接操作都会生成一个新的字符串对象。因此,如果有多个连接操作,可能会导致多次创建新的字符串对象,从而引起性能问题。其时间复杂度为 O(n^2),其中 n 是连接操作的次数。

StringBuilder:

使用 StringBuilderappend 方法会在同一个可变的字符串缓冲区上执行连接操作,避免了多次创建新的字符串对象。这种方式的时间复杂度为 O(n),其中 n 是连接操作的次数。

到这总算明白了报错的原因,string的+连接每次都会新建一个字符串,每次相当于平均O(n)复杂度,再加上拼接的n次,复杂度可不是O(n)吗,再结合那个离谱的案例,不超时间才怪呢,看来一些基础掌握的还是不牢。

题目代码:

class Solution {public String repeatLimitedString(String s, int repeatLimit) {int[] nums = new int[26];for (int i = 0; i < s.length(); i++) {nums[s.charAt(i) - 'a']++;}StringBuilder result = new StringBuilder();int back = 0, flag = 25, flag2 = -1, back2 = 0;for (int i = 25; i >= 0;) {if (nums[i] == 0) {i--;continue;}if (back == 1 && nums[i] > 0) {result.append((char)('a' + i));nums[i]--;flag2 = i;back2 = 1;i = flag;back = 0;continue;}if (nums[i] <= repeatLimit) {for (int j = 0; j < nums[i]; j++) {result.append((char)('a' + i));}if (back2 == 1 && flag2 != -1) {i = flag2 + 1;back2 = 0;}nums[i] = 0;} else {for (int j = 0; j < repeatLimit; j++) {result.append((char)('a' + i)); }nums[i] -= repeatLimit;if (nums[i] > 0) {back = 1;flag = i;}if (back2 == 1 && flag2 != -1) {i = flag2 + 1;back2 = 0;}}i--;}return result.toString();}
}

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

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

相关文章

Bean作用域及生命周期

关于Bean对象&#xff0c;在将其存储到spring中以后&#xff0c;在使用或读取该Bean对象时&#xff0c;如果该对象是公有的&#xff0c;难免就会出现被一方修改&#xff0c;从而影响另外一方读取到的对象准确性的情况。因此了解Bean的作用域和生命周期就是十分必要的了。 首先…

Fedora Linux 中安装 nginx

Fedora 35 中安装 nginx 的方法非常简单。 运行下面的命令&#xff1a; sudo dnf install nginx 在提示你需要确认的地方&#xff0c;输入 y 后回车即可。 开机自动启动 如果你希望在你的操作系统重启的时候自动启动 nginx&#xff0c;请输入下面的命令&#xff1a; syst…

【昕宝爸爸小模块】如何让Java的线程池顺序执行任务

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

文本翻译GUI程序,实现简单的英汉互译

项目地址&#xff1a;mendianyu/txtTranslate: 文本翻译GUI程序&#xff0c;实现简单的英汉互译 (github.com) 文本翻译GUI程序&#xff0c;实现简单的英汉互译 项目结构 三个java文件加一个pom文件 项目运行效果 语言可选择en(英语) zh(汉语) auto(自动识别&#xff0c;仅源语…

序章 熟悉战场篇—了解vue的基本操作

了解vue 的基本目录&#xff1a; dist 是打包后存放的目录(后续可以改)node_modules 是依赖包public 是静态index页面src 是存放文件的目录assets 是存放静态资源的目录components 是存放组件的目录views 是存放页面文件的目录&#xff08;没有views 自己新建一个&#xff09;A…

使用FreeBASIC设计8051单片机汇编编译器

在STC论坛上看到有人用C语言实现8051汇编编译器&#xff08;源码&#xff09;&#xff0c;好奇下&#xff0c;试着用FB写了一下。 基本原理就是通过分析汇编文件然后转换为机器码。以下是51汇编与机器码对应的表格&#xff08;数据来自网络&#xff0c;如果发现有误请联系QQ149…

为什么mysql的索引结构用B+树而不用skipList?

【学习笔记】B树和skipList的时间复杂度都是O(log n)&#xff0c;为什么mysql底层要用B树而不用skipList&#xff1f;_推导b树的查询效率为什么是o(logn)-CSDN博客 1.b树的非叶子节点存的是数据页地址&#xff0c;而跳表存的是真实数据&#xff0c;所以&#xff0c;在相同内存…

【InternLM 大模型实战】第四课

XTuner 大模型单卡低成本微调实战 FINETUNE简介指令跟随微调增量预训练微调LoRA & QLoRA XTuner简介功能亮点适配多种生态适配多种硬件 8GB 显卡玩转LLMFlash AttentionDeepSpeed ZeRO 动手实战环节环境配置微调准备配置文件模型下载数据集下载修改配置文件开始微调将得到的…

监督学习 - 神经网络(Neural Networks)

什么是机器学习 神经网络&#xff08;Neural Networks&#xff09;&#xff0c;也称为人工神经网络&#xff08;Artificial Neural Networks&#xff0c;ANNs&#xff09;是一种受到生物神经网络启发而设计的机器学习模型。神经网络由神经元&#xff08;或节点&#xff09;组成…

HTML标签(一)

目录 HTML语法规范 基本语法概述 标签关系 HTML基本结构标签 第一个HTML网页 开发工具 VSCode的使用&#xff1a; VScode工具生成骨架标签新增代码 文档类型声明标签 lang语言种类 字符集 总结 HTML常用标签 标签语义 标题标签 段落标签 换行标签 文本格式化…

unity urp 视差卡牌

总体效果大概四层&#xff0c;从后往前排序为&#xff1a;卡背、背景、画像、边框 首先卡背比较简单&#xff0c;只要判断如果网格的背面就直接采样卡背图片展示即可 资源准备&#xff1a; 然后是背景&#xff0c;网上找到一张这样的图。 但他还不符合要求&#xff0c;我们的…

Tomcat源码解析(一): Tomcat整体架构

Tomcat源码系列文章 Tomcat源码解析(一)&#xff1a; Tomcat整体架构 目录 一、Tomcat整体架构1、Tomcat两个核心组件功能2、Tomcat支持的多种I/O模型和应用层协议 二、Connector连接器1、连接器功能汇总2、ProtocolHandler组件2.1、Endpoint2.2、Processor 3、Adapter组件 三…

好大夫问诊数据爬虫记录

好大夫问诊数据爬虫入库字段记录 获取医生的病程列表 uid Column(Integer, primary_keyTrue, autoincrementTrue) gender Column(String(10)) # 性别 age Column(Integer) # 年龄 # 总交流次数 total_communication_times Column(Integer) # 医生回复次数 doctor_reply_t…

uniapp 编译后文字乱码的解决方案

问题: 新建的页面中编写代码&#xff0c;其中数字和图片都可以正常显示&#xff0c;只有中文编译后展示乱码 页面展示也是乱码 解决方案: 打开HuilderX编辑器的【文件】- 【以指定编码重新打开】- 【选择UTF-8】 然后重新编译就可以啦~ 希望可以帮到你啊~

synchronized锁升级

在 Java 中&#xff0c;synchronized 锁可以进行升级&#xff0c;以提高锁的效率。具体来说&#xff0c;当多个线程竞争同一个锁时&#xff0c;锁的状态会按照以下顺序进行升级&#xff1a; 无锁&#xff1a;没有其他线程竞争锁。偏向锁&#xff1a;一段同步代码一直被同一个线…

2024年海外推广怎么做?

要说如何做海外推广&#xff0c;绝大多数的外贸小伙伴都能说上一些&#xff0c;但是大部分人对于推广系统知识略知一二&#xff0c;没有构建一个系统化的知识框架。 海外推广的几大步骤 1.定策略 做海外推广前&#xff0c;我们需要制定一套营销策略&#xff0c;需要去定义一…

基本工具配置

github加速 github.ur1.fun java # ubuntu20.04 安装 openjdk-17-jdk sudo apt install openjdk-17-jdk java -version javac -version which java参考 openjdk gradle换源 修改gradle-wrapper.properties distributionBaseGRADLE_USER_HOME distributionPathwrapper/dis…

【Vue计算属性详细介绍】

Vue计算属性详细介绍 1. 计算属性2. 基本特点3. 定义方法4. Getter 和 Setter5. 计算属性 vs 方法6. 计算属性 vs 侦听器7. 限制 1. 计算属性 计算属性&#xff08;Computed properties&#xff09;是Vue框架中一个非常重要的概念&#xff0c;它们用于声明式地定义可供模板读取…

2023极客大挑战web小记

拿到题目提示post传参还以为是道签到题 刚开始直接把自己极客大挑战的username以及password怼上去&#xff0c;但是不对。看看F12&#xff0c;有提示。 当一个搜索蜘蛛访问一个站点时&#xff0c;它会首先检查该站点根目录下是否存在robots.txt&#xff0c;如果存在&#xff0c…

PHP AES加密:保护数据安全的高级加密技术

PHP AES加密&#xff1a;保护数据安全的高级加密技术 ASE&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密算法&#xff0c;也被称为Rijndael加密算法。它是由比利时密码学家Joan Daemen和Vincent Rijmen设计的&#xff0c;于2001年被美国国家标准与技术研…