《剑指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 中国大陆许可协议进行许可。
分类:
,
标签:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步