BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #96184同步于 2018/7/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

leetcode567 题求助

LoveDwade
2018/7/9镜像同步1 回复
class Solution { public boolean checkInclusion(String s1, String s2) { char[] ss1 = new char[s1.length()]; ss1 = s1.toCharArray(); char[] ss2 = new char[s2.length()]; ss2 = s2.toCharArray(); HashMap<Character,Integer> hm = new HashMap(); int len = s1.length(); for(int i = 0; i < len; i++){ if(!hm.containsKey(ss1[i])) hm.put(ss1[i], 1); else hm.put(ss1[i], hm.get(ss1[i]) + 1); } int left = 0; int right = len; while(right < s2.length() + 1){ for(int i = left; i < right; i++){ if(!hm.containsKey(ss2[i])) break; else{ hm.put(ss2[i], hm.get(ss2[i]) - 1); if((int)hm.get(ss2[i]) < 0) break; else return true; } } left++; right++; } return false; } } Input: "hello" "ooolleoooleh" Output: true Expected: false
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
a2013211232机器人#1 · 2018/7/9
不知道我理解错没有,你这里好像有两个错误: 第一个在for循环里面,没有键值break没有问题,有键值则值减一,如果键值还大于0就返回true??? 不应该所有的键值都减为了0才返回true吗 第二个就算你把第一个问题改掉了,下一次循环中你的hm没有重置,肯定也不行吧。。。 这种问题好像是标准的滑动窗口问题,你可以去看看(因为英文字母只有26个,所以每次比较key值的代价是不大的)