其他分享
首页 > 其他分享> > Leetcode每日一题(2022.2.2)

Leetcode每日一题(2022.2.2)

作者:互联网

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMzI0Njg2MDM=,size_20,color_FFFFFF,t_70,g_se,x_16

 评论代码分析(自己写的太烂了):

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMzI0Njg2MDM=,size_20,color_FFFFFF,t_70,g_se,x_16

 这个用户通过String的indexOf方法得到下标


int indexOf(int ch)


为什么形参是(int ch)呢?我以为是(char ch),既然不懂,就看源代码:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMzI0Njg2MDM=,size_12,color_FFFFFF,t_70,g_se,x_16

 原来是得到char的Ascll码,然后调用

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMzI0Njg2MDM=,size_20,color_FFFFFF,t_70,g_se,x_16

 接下来这些就是indexOf查找相应子串的核心了。尝试看一下,没看懂,应该是技术还没到家,先不管他。

回到那个用户的代码

得到下标之后,对他进行判断,如果字符串中不包含该子串,通过indexOf得到的整形就是-1。这里的判断筛选是否存在子串。

之后创建StringBuilder对象,通过带参的构造方法得到一个StringBuilder对象

StringBuilder(String str) 
构造一个初始化为指定字符串内容的字符串构建器。

题外话:


我们都知道,可变字符串有两种,一个是StringBuffer,一个是StringBuilder,因为StringBuffer才用了同步锁,所以在线程安全方面来说,我个人习惯来说都是会使用StringBuffer。


在看带参构造方法里面String的substring方法

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP6ZWH5YGa6aKY5a6277yITG9zZXLvvIk=,size_14,color_FFFFFF,t_70,g_se,x_16

 给一个参数,截取就是从给的参数开始,到最后,这个子串。

给两个参数,就是截取从参数1到参数2之间(包含)的子串,这里通过substring得到了需要反转的子串,然后通过StringBuilder的带参构造得到了需要反转的StringBuilder对象,就可以直接通过StringBuilder的reverse()方法进行反转(怎么反转已经写好了)。

在然后通过StringBuilder的append()方法,将两个字符串拼接起来。

append()方法是将参数拼接到调用这个参数的StringBuilder对象后面,这样就完成了字符串的指定子串反转。

之后在调用StringBuilder的toString()方法将StringBuilder对象转换成String对象返回即可完成题目

标签:子串,String,indexOf,StringBuilder,每日,参数,字符串,2022.2,Leetcode
来源: https://blog.csdn.net/qq_32468603/article/details/122771575