返回信息流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
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #96184同步于 2018/7/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
leetcode567 题求助
LoveDwade
2018/7/9镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
不知道我理解错没有,你这里好像有两个错误:
第一个在for循环里面,没有键值break没有问题,有键值则值减一,如果键值还大于0就返回true??? 不应该所有的键值都减为了0才返回true吗
第二个就算你把第一个问题改掉了,下一次循环中你的hm没有重置,肯定也不行吧。。。
这种问题好像是标准的滑动窗口问题,你可以去看看(因为英文字母只有26个,所以每次比较key值的代价是不大的)