剑指Offer-第一个只出现一次的字符位置

题目描述#

在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置

思路#

思路一:

使用整型数组对出现次数进行统计。

思路二:

使用BitSet对出现次数进行统计。 0,1,更多

代码实现#

Copy
package String; import java.util.BitSet; /** * 第一个只出现一次的字符位置 * 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 */ public class Solution51 { public static void main(String[] args) { Solution51 solution51 = new Solution51(); String str = "eabbaecdffd"; System.out.println(solution51.FirstNotRepeatingChar_2(str)); } /** * 使用BitSet对出现次数进行统计 0,1,更多 * 对应ASCII码表的256个字符 * * @param str * @return */ public int FirstNotRepeatingChar_2(String str) { BitSet bs1 = new BitSet(256); BitSet bs2 = new BitSet(256); for (char c : str.toCharArray()) { if (!bs1.get(c) && !bs2.get(c)) { bs1.set(c); // 0 0 } else if (bs1.get(c) && !bs2.get(c)) { bs2.set(c); // 0 1 } } for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (bs1.get(c) && !bs2.get(c)) return i; } return -1; } /** * 使用整型数组对出现次数进行统计 * 对应ASCII码表的256个字符 * 数组的index就是字符, 值为字符出现的次数 * * @param str * @return */ public int FirstNotRepeatingChar(String str) { int[] cnts = new int[256]; for (int i = 0; i < str.length(); i++) cnts[str.charAt(i)]++; for (int i = 0; i < str.length(); i++) if (cnts[str.charAt(i)] == 1) return i; return -1; } }
posted @   武培轩  阅读(502)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
CONTENTS