【面试题】找出字符串中唯一一个单独出现的字符

给定一个字符串,里面的字符都是成对出现,除了一个,要求找到这个单独出现的字符。
比如“AABBCCDDE”,返回“E”。

当然可以遍历,看当前元素是否和后面的字符一样,不一样就返回,这样的时间复杂度是 O ( n ) O(n) O(n)。还有时间效率更高的方法,可以用二分查找。

可以观察到,整个字符串长度n一定是奇数,且如果是成对的,每个偶数下标处的字符和紧挨着它后面的奇数字符应该是一样的。当我们用二分查找,mid=n/2(向下取整),比较mid,和mid-1处的字符是否一样。

为什么是比较mid和mid-1处的字符,因为mid处是整个串的中间位置,如果和mid-1处的字符一样,意味着mid和mid-1处的字符是一对,mid-1前面有奇数个字符,则单独的字符就在前半段,则将查询范围转移到前半段。
同理,若mid和mid-1处的字符不同,且mid和mid+1处的不同,则单独的字符就在后半段,将查询范围转移到后半段。
当然还要注意一些特殊情况,比如,可以先查询单个字符是不是在首位处、正中间处。

所以我不是很明白下面这个博客里的代码,他的逻辑和我的正好是反着的。
https://blog.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值