如何更有效的例用字符串

给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串,判断字符串是否有效。 题目 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5: 输入: "{[]}" 输出: true 来源:力扣 阅读详情
看完上篇(請參考九月十二日的Java週報)筆者所講解的物件的比較之後,
既然講到了字串,筆者就再來跟大家討論一下,如何有效率地使用字串。
你也許會有疑問說,字串就這樣用啊,什麼叫有效率的使用字串呢?我們
先來確定一件事情,Java API說明文件上有這麼一行字:“Strings are
constant; their values cannot be changed after they are created.
String buffers support mutable strings. Because String objects
are immutable they can be shared.”。意思是字串是個常數,是不可
更改的,也就是說你對一個字串物件做任何的修改,像是加上另一個串、
把字母變大寫等等,都會產生一個新的字串物件。我們做個小小的測試,
來証明這件事情。
String str1 = new String(“hello”);
String str2 = str2;
boolean b1 = str1 == str2;

還記得上週筆者講解的字串之間比較嗎?b1得到的結果是true,代表str1
和str2參考到同一個字串物件,忘記或是不清楚的讀者,再回去翻翻週報
的內容。如果現在我們把str2加上“java”這個字串:
str2 = str2 + “java”;
boolean b2 = str1 == str2;

你會發現b2的結果是false,代表str1和str2所參考的字串物件已經不是同
一個了!現在在系統中就有三個字串物件,一個是“hello”,第二個是“
java”,第三個是“hellojava”。因為在Java中,字串有這樣一個不可修
改的特性,所以才會引發出如何有效地使用字串這個問題出來。

字串是每個應用程式都會用到的物件,常常有些程式中會對字串做大量的
運算,尤其是兩個字串的相加,例如我們寫了一個從網路上讀取網頁資料
的程式,跑個迴圈,用BufferedReader物件一次讀一行進來,然後把每一
行再加在一起。像這種很直覺、很簡單的程式,兩行就搞定了,可是JVM中
所做的事情可多了。 假設我們寫個一程式,要把一個字串一直加上“a”
一百次,很直覺得我們會這樣寫:
String str = “”;
for (int i=0; i<100; i++)
str += “a”;

可是你知道在記憶體中會產生多少的垃圾出來嗎?總共會有a、aa、aaa、
aaa….,無疑的,上述的程式雖然簡單,但浪費了不少的記憶體,而且產
生物件和物件的存取也會花掉不少的時間,我們加上幾行程式碼來測試所
花的時間和記憶體:
long startTime = System.currentTimeMillis();
long startMem = Runtime.getRuntime().freeMemory();

for (int i=0; i<1000; i++)
str += "a";

long endMem = Runtime.getRuntime().freeMemory();
System.out.println("Use memory: "+ (startMem - endMem));
long endTime = System.currentTimeMillis();
System.out.println("Use Time: "+ (endTime – startTime));

上面的程式在筆者的PIII-800的電腦上跑,平均花了50 ms和151256 bytes
的記憶體,時間還好,但記憶體使用量算蠻大的了。那我們要如何來改進
讓程式更有效率呢?因為String物件是不可修改的,可是程式中又常需要
這樣的一個動作,所以Java提供了另外一個類別,專門來處理字串運算用
的,這個類別就叫作StringBuffer。StringBuffer類別提供了很多方法來
做字串的運算,但如附加、刪除、插入、反轉、替換等等…。我們就用
StringBuffer類別所提供的附加(append)方法來做到跟上面那個例子同樣
的結果:
StringBuffer sb = new StringBuffer();
long startTime = System.currentTimeMillis();
long startMem = Runtime.getRuntime().freeMemory();

for (int i=0; i<1000; i++)
sb.append(“a”);

long endMem = Runtime.getRuntime().freeMemory();
System.out.println("Use memory: "+ (startMem - endMem));
long endTime = System.currentTimeMillis();

修改過的程式在筆者電腦上跑,平均花了0 ms和4854 bytes的記憶體。
0 ms?!多跑幾次有時會到10 ms,要看你電腦CPU目前的負載如何,不
過跟前面的例子比較起來,已經算是快了,而且記憶體也使用的非常少
。這只是個小小的例子,如果字串量再大一點,兩者的差異會更明顯。

所以結論就是,如果你的程式中會對字串做大量的修改時,請改用
StringBuffer類別,它會明顯示改進你程式的效率。至於StringBuffer
類別所提供的方法詳細的使用說明,就請自行參閱Java API。
【Python】给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串,判断字符串是否有效 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import p 阅读详情

相关推荐

[LeetCode-678] 有效的括号字符串

发布于个人公众号,打开微信,搜索MelodyJerry即可 678. 有效的括号字符串 难度 中等 通过率 38.36%(40,269/104,970) 给定一个只包含三种字符的字符串:(,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 )。 任何右括号 ) 必须有相应的左括号 ( 。 左括号 ( 必须在对应的右括号之前 )。 * 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。 一个空字符串也被视为.

喜欢前端的后端 MelodyJerry 8013

例8.18 将字符串a复制为字符串b,然后输出字符串b。

解题思路:定义两个字符数组a和b,用“I am a student.”对a数组初始化。将a数组中的字符逐个复制到b数组中。可以用不同的方法引用并输出字符数组元素,今用地址法算出各元素的值。 #include int main() {char a[ ]="I am a student.",b[20]; int i; for(i=0;*(a+i)!='\0';i++) *(b+

zhuzhu_小妖的专栏 9525

字符串-有效的括号-简中-20210912

字符串-LC20有效的括号-简单-20210912 1. 题目描述 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例: 输入:s = "()" 输出:true 输入:s = "()[]{}" 输出:true 输入:s = "(]" 输出:false 输入:s = "([)]" 输出:false 输入:s = "{[]}" 输出:true 提示: 1

qq_40008772的博客 729

字符串的输出与使用以及注意事项以及基本案例——完整版

例题 : 定义一个字符数组,在其中存放字符串“I love China!”,输出该字符串和第8个字符。 解题思路: 定义字符数组string,对它初始化,由于在初始化时字符的个数是确定的,因此可不必指定数组的长度。用数组名string和输出格式%s可以输出整个字符串。用数组名和下标可以引用任一数组元素。 /* Note:Your choice is C IDE */ #include "st...

hey,欢迎浏览我的博客,希望能给你提供帮助。 2238

每日一题:给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串,判断字符串是否有效。

每日一题:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 2020年11月27日,力扣,简单,有效的括号 一、题目描述 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 二、解题思

爱喝雪碧的大个子 2202

华为OD- 字符串序列判定-2024年OD(E卷)

输入两个字符串S和L,都只包含英文小写字母。S长度<=100,L长度<=500,000。判定S是否是L的有效子串。判定规则:S中的每个字符在L中都能找到(可以不连续),且S在L中字符的前后顺序与S中顺序要保持一致。(例如,S=”ace”是L=”abcde”的一个子序列且有效字符是a、c、e,而”aec”不是有效子序列,且有效字符只有a、e)输入两个字符串S和L,都只包含英文小写字母。S长度<=100,L长度<=500,000。先输入S,再输入L,每个字符串占一行。S串最后一个有效字符在L中的位置。(首位从0

蜗牛快快快快跑的博客 278

LeetCode20 有效的括号(js)

利用了栈先进后出的特性,采用的最最最基础的枚举法,去循环、判断了每一种可能正确的情况。如果为空,说明所有开括号都正确匹配了闭括号,返回。这个优化后的解法保持了 O(n) 的时间复杂度,并且使代码更加简洁易读。来映射开括号到对应的闭括号,这样我们可以通过查找。是否为开括号,并且可以直接获取对应的闭括号。如果不为空,说明有未匹配的开括号,返回。循环来遍历字符串,这样可以直接使用。来获取栈顶元素,并与当前闭括号。当遇到闭括号时,我们直接使用。如果匹配,循环继续,因为。,判断字符串是否有效。已经移除了栈顶元素。

m0_74267584的博客 383

lego-loam featureAssociation 源码注释(五)

上一次我们已经看完了特征提取,这次我们进入特征匹配的内容!!!systemInitedLM的初始值为false。

Joeybee的博客 889

判断字符串为空大全

String.IsNullOrEmpty(value) 或者 value==null||value.Length==0   http://blog.csdn.net/meifage2/article/details/6621668

重 头 再 来 365

信号完整性分析学习--16--传输线效应

传输线效应 说到传输线效应,大多数人都会想到一个经验法则,那就是: “当互连线的长度大于1/6倍的信号上升时间的空间延伸时,互连线就体现出传输线效应。” 上升时间越小越容易体现传输线效应。 由此可见,同一根互连线,它是否体现传输线效应,要看它要传输什么样的信号。下图所示,一根延时为15ps的互连线,当它传输上升时间为60ps的信号时就会体现传输线效应;当它传输上升时间为180ps的信号时就不体现传输线效应。

qq_29476769的博客 7282

SAP 屏幕增强:客户商主数据屏幕增强(KNA1、KNB1、KNVV)

本文介绍了SAP系统中针对客户主数据(KNA1、KNB1、KNVV)进行屏幕增强的具体实现方法。主要内容包括:1)在SPRO配置中创建新条目;2)通过SE80创建函数组和程序(LZKNA1TOP等);3)设置子屏幕9001并添加自定义结构字段;4)利用BADI(CUSTOMER_ADD_DATA等)实现数据交互逻辑。文章分别详细说明了针对客户主数据的一般数据(KNA1)、公司代码数据(KNB1)和销售数据(KNVV)三类不同数据的增强配置步骤,包括函数模块创建、屏幕设置和BADI方法调用等关键技术点。

SAP ABAP开发技能记录分享 1619

有效的括号字符串

有效的括号字符串 给定一个只包含三种字符的字符串:(、)和*,写一个函数来检验这个字符串是否为有效字符串,有效字符串具有如下规则: 任何左括号(必须有相应的右括号)。 任何右括号)必须有相应的左括号(。 左括号(必须在对应的右括号之前)。 *可以被视为单个右括号),或单个左括号(,或一个空字符串。 一个空字符串也被视为有效字符串。 示例 输入: "()" 输出: True 输入: "(*)" 输出: True 输入: "(*))" 输出: True 题解 /** * @param {string

WindRunnerMax 979

LVI-SAM实战:如何在Ubuntu20.04上快速复现激光-视觉-惯性里程计系统

本文详细解析了在Ubuntu 20.04环境下部署和优化LVI-SAM激光-视觉-惯性里程计系统的全流程。从环境配置、依赖安装到源码编译和实战调参,提供了完整的解决方案和性能优化策略,帮助开发者快速实现厘米级精度的实时位姿估计。

m3n5b7v8c9x的博客 1047

字符串问题之 括号字符串的有效性和最长有效长度

字符串问题之 括号字符串的有效性和最长有效长度 给定一个字符串 str, 判断是不是整体有效的括号字符串 str=“(())” true str=“()a()” false 进阶题目: 给定一个括号字符串str,返回最长的有效括号子串 首先原问题的解决思路: 各种判断: 遍历判断每个字符是不是“(” 或“...

art_code的博客 1052

手把手教你排查Abaqus中的Johnson-Cook损伤参数:避免因d3正负号导致的仿真失败

本文详细解析了Abaqus中Johnson-Cook损伤参数d3正负号设置的关键问题,帮助用户避免因参数错误导致的仿真失败和Excessive distortion报错。通过对比不同文献定义、提供实操指南和典型错误排查流程,有效提升非线性分析的准确性和效率。

weixin_33960567的博客 356

Thor芯片部署

英伟达Jetson Thor芯片性能分析与应用现状 摘要:英伟达最新发布的Jetson Thor芯片基于Blackwell架构,官方宣称AI算力达2070TFLOPS(FP4),较前代Orin提升7.5倍,配备14核Arm CPU和128GB内存。然而实际量产版算力缩水至700TOPS,且因4nm制程良率问题多次延期至2025-2026年交付。该芯片支持FP4/FP8量化、Transformer引擎等先进特性,适用于自动驾驶、机器人等边缘AI场景,但受供应链限制,国内厂商倾向自研方案。开发者可通过JetPa

xiaomu_347的博客 431

括号字符串的有效性和最长有效长度

题目描述 给定一个字符串str,判断是不是整体有效的括号字符串(整体有效:即存在一种括号匹配方案,使每个括号字符均能找到对应的反向括号,且字符串中不包含非括号字符)。 输入描述: 输入包含一行,代表str( 1 \leq length_{str} \leq 10^5)(1≤lengthstr​≤105)。 输出描述: 输出一行,如果str是整体有效的括号字符串,请输出“YES”,否则输出“NO”。 示例1 输入 (()) 输出 YES 示例2 输入 ()a() 输出

砍柴人的博客 494

R语言中的Gamma分布函数

在R语言中,我们可以使用最大似然估计(Maximum Likelihood Estimation,MLE)或最小二乘估计(Least Squares Estimation,LSE)等方法来估计Gamma分布的参数。本文介绍了在R语言中使用Gamma分布函数的基本操作,包括生成随机变量、计算概率密度函数和累积分布函数,以及参数估计和拟合。函数来生成Gamma分布的随机变量,计算概率密度函数(PDF)和累积分布函数(CDF),以及进行参数估计和拟合。要计算Gamma分布的累积分布函数(CDF),我们可以使用。

ByteWhiz的博客 1632

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。【C++】

给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例2: 输入: "()[]{}" 输出: true 示例3: 输入: "(]" 输出: false 示例4: 输入: "([)]" 输出: false 示例5: 输入: "{[]}" 输出: true 来源:力扣(Le...

shejun6的博客 8740

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

该字符串未被识别为有效的 DateTime

C#字符串转DateTime C#字符串转DateTime 作者:灵感联盟 我在工作中遇到了这样一个错误提示 : 该字符串未被识别为有效的 DateTime 字面上看就是字符串转换dateTime失败了呗,但是我之前运行是好好的。代码是这样的 DateTime dt= DateTime.ParseExact(formatDate(time), "yyyy-MM-dd hh-mm-ss",Cultu...

qq_41971373的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

leetcode: 判断字符串是否有效

题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 解法1: 思路: 使用hashmap进行存括号的匹配关系,再使用栈来存储左括号;每次进行比较然后弹栈; 步骤: 将括号匹配关系放入hashmap中 遍历数...

CodeBoy975 2835

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

字符串问题---括号字符串的有效性和最长有效长度

【题目】给定一个字符串str,判断是不是整体有效的括号字符串。例如,str = “()()()”,返回True,str = “())” 或 “()a()”,返回False。【补充题目】给定一个括号字符串,返回最长的有效字符串。【基本思路】原问题。判断过程如下: 从左到右遍历str,判断每一个字符是否是括号,如果不是,直接返回False。 遍历过程中,检查目前位置 ‘(‘和 ‘)’的数量,如果 ‘)’

冰殇的博客 2064
上一篇: JSTL 入门:表达式语言简化对 JSP 应用的软件维护
下一篇: 我的 O/R Mapping 之旅(一)
leek2000
博客等级 码龄25年 7粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值