招式拆解(第一个出现一次的字符),剑指offer,力扣

目录:

题目地址:

我们直接看题解吧:

解题方法:

审题目+事例+提示:

解题思路(哈希表):

代码实现:

代码(有序哈希表):

代码(KMP):


题目地址:

LCR 169. 招式拆解 II - 力扣(LeetCode)

难度:简单

今天刷招式拆解(第一个出现一次的字符),大家有兴趣可以点上看看题目要求,试着做一下

我们直接看题解吧:

解题方法:

  1. 哈希表
  2. 数组(效率最低)
  3. 模式匹配

审题目+事例+提示:

如不存在题目条件元素则返回空格

解题思路(哈希表):

    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' ';
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值