目录:
题目地址:
难度:简单
今天刷招式拆解(第一个出现一次的字符),大家有兴趣可以点上看看题目要求,试着做一下。
我们直接看题解吧:
解题方法:
- 哈希表
- 数组(效率最低)
- 模式匹配
审题目+事例+提示:
如不存在题目条件元素则返回空格
解题思路(哈希表):
1、第一次循环,遍历字符串arr每个字符c,
·若map中不包含哈希表的key值,则添加对应键值对,值设为true
·若map中包含哈希表的key值,修改值value为false
2、第二次循环,再次遍历字符串,若存在字符串元素对应哈希表value值为true,则返回该元素
3、若无该元素,则返回空格' '
代码实现:
Map<Character, Boolean> dic = new HashMap<>();
char[] array = s.toCharArray(); //转为字符数组
for (char c : array) {
dic.put(c, !dic.containsKey(c));//如果已含有该元素,存入false,否则存入True
}
for (char c : array) {
if (dic.get(c)) return c;// 取出value 值,ture则返回该元素
}
return ' ';
代码(有序哈希表):
class Solution {
public char dismantlingAction(String arr) {
Map<Character, Boolean> hmap = new LinkedHashMap<>();
char[] sc = arr.toCharArray();
for(char c : sc)
hmap.put(c, !hmap.containsKey(c));
//这里用集合setmap,存入与取出顺序一致
for(Map.Entry<Character, Boolean> d : hmap.entrySet()){
if(d.getValue()) return d.getKey();
}
return ' ';
}
}
代码(KMP):
public int firstUniqChar(String s) {
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(s.indexOf(c)==s.lastIndexOf(c))
return i;
}
return' ';
}