某套连招动作记作仅由小写字母组成的序列 arr,其中 arr[i] 第 i 个招式的名字。请返回第一个只出现一次的招式名称,如不存在请返回空格。
- 示例 1:
输入:
arr = "abbccdeff"
输出:a
- 示例 2:
输入:
arr = "ccdd"
输出:' '
- 限制:
0 <= arr.length <= 50000
unorder_map+vector
记录字母出现的顺序unorder_map
呢?unordered_map
基于哈希表实现,插入和查找元素的平均时间复杂度为 O(1),但最坏情况下的时间复杂度为 O(n);而 std::map
是基于红黑树实现的关联容器,用于存储键-值对,并根据键进行排序和查找。对于 std::map
,查找特定键的元素的时间复杂度是 O(log n),其中n是map中元素的数量。插入键值对的时间复杂度也是 O(log n)。而本题中键本身的顺序并无作用,故只使用平均时间复杂度较小的 unorder_map
。class Solution {
public:
char dismantlingAction(string arr) {
unordered_map<char, bool> hmap;
for(char c : arr)
hmap[c] = hmap.find(c) == hmap.end();
for(char c : arr)
if(hmap[c]) return c;
return ' ';
}
};
class Solution {
public:
char dismantlingAction(string arr) {
vector<int> v(26, 0);//大小26个元素,初始化为0
for(auto &ele:arr) v[ele-'a']++;
for(auto &ele:arr) if(v[ele-'a']==1) return ele;
return ' ';
}
};