🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:【Java】内容概括
力扣(leetcode)
题库编号为387,关于字符串处理【注意】:为什么要遍历两次?
字符串“leetcode
”
第一次遍历:e出现三次,其他字符出现一次 第二次遍历:排除e之后,找到第一个出现的l,然后返回索引
如果只遍历一次: e出现一次后,无法确定后面还有没有e,必须遍历完所有字符之后,再进行第二次遍历(按字符串顺序,因为第一次遍历放在数组中统计时,打乱了顺序),去找到我们的目标k
【总结】
so:两次遍历
代码详解已经注释详细
public class Test {
public int firstUniqChar(String s){
//创建数组,因为只有26个字母,所有范围给26即可
int[] arr = new int[26];
//第一次遍历:全局统计每个字符出现的次数
for (int i = 0; i < s.length(); i++) {
//获取索引为i的字符,并赋值给ch
char ch = s.charAt(i);
//ch-97得到的是索引位置,没遇到一次,次数++
arr[ch-97]++;
}
//第二次遍历:找到第一个唯一出现的字符
for (int i = 0; i < s.length(); i++) {
//同理,先获取字符
char ch = s.charAt(i);
//判断,遇到第一个后直接返回索引
if(arr[ch-97] == 1){
return i;
}
}
return -1;
}
}
验证一下
public static void main(String[] args) {
Test test = new Test();
String tmp = "leetcode";
int ret = test.firstUniqChar(tmp);
System.out.println(ret);
}
力扣“字符串中第一个唯一字符”题,通过 Java 实现的“数组统计 + 双遍历”方案,完美诠释了“先统计后查找”的经典算法思路。利用数组对固定范围字符的高效处理能力,在时间和空间复杂度上达到较优解。