2023-02-08 17:50阅读: 21评论: 0推荐: 0

《剑指Offer》-50-第一个只出现一次的字符

返回“第一个”,怎么才能说是第一个?
首先要确定它只出现一次,其次还得是第一个满足以上条件的
哦,只包含小写字母是吧,那容易啊

至少需要一次遍历才能确定一个字母是不是只出现了一次,那有没有可能在这次遍历中就保存下来第一个呢

我一下子竟然想不出来怎么做
确切地说是自动屏蔽了那些看起来时间、空间不够好的方法

书上有一点我很疑惑,它想用数组下标映射替代哈希,然后说ASCII只有256位所以数组长度就这么决定,没问题但是…中文字符不也可以是char吗?那肯定不是256个数组就可以表示得完得了

中文的ASCII是是个什么东西?所以可以说书上的题解不严谨吗

结果还是要两次遍历,只是优化了空间复杂度

char firstUniqChar(string s) {
char first = ' ';
vector<int> ascii(26);
for (char ch : s) {
ascii[ch - 97]++;
}
for (char ch : s) {
if (ascii[ch - 97] - 1 == 0) {
first = ch;
break;
}
}
return first;
}

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/17102792.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(21)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起