Java String类练习
1,字符串的第一个唯一字符
思路:
是否可以直接遍历count数组,第一个为1的就是出现一次的字母
不可以
如果直接遍历 count 数组找第一个值为 1 的索引,会得到字母表中第一个出现一次的字母(如字符串是 leetcode
,遍历 count 数组会找到 b
,但实际答案是 l
),这与题目要求不符。
统计次数:count[c - 'a']++
利用字符与 'a'
的 ASCII 差,把 a~z
映射到数组索引 0~25
,高效统计次数。
按原顺序遍历:必须按字符串的原始顺序遍历,而非遍历 count 数组。因为题目要求 “第一个不重复的字符”(按字符串出现顺序找,而非字母表顺序)。
即,统计次数后,按原字符串顺序遍历,找第一个 count
为 1 的字符。
代码实例:
首先定义了count数组来存放26个字母
第一个for循环来计数,计数每一个字符出现的次数
第二个for循环来返回第一个只出现一次的字符
2,字符串最后一个单词的长度
思路:
有两种方法
可以通过字符串分割,使用split()
也可以找到最后一个空格的下标,然后截取空格后的字符串,然后求长度,使用lastindexOf和 subString()
代码示例
方法1:
方法2:
若这些方法不明白就去看佩奇大王的Java String类哦
3,验证回文串

思路:
由题目可以得知,字母,数字属于字母数字字符,而标点符号属于非字母数字字符
我们先写一个方法来判断字符是否为字母数字字符,是的话返回true,不是返回false
然后要将大写字母转化为小写字母
我们可以把一段(可能包括标点符号的)字符串分别设置 锚点 在 开头和末尾(可以理解为指针,但要注意java中没有指针)
当检测到不是字母数字字符,左锚点向右移动一位,右锚点向左移动一位
再判断左锚点和右锚点上的字符是否一致,一致就左锚点向右移动一位,右锚点向左移动一位,不一致直接返回false