《剑指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;
}