在字符串代码中查找所有 Anagrams 不起作用
Find All Anagrams in a String code not working
Input link for which it is failing
对于给定的问题陈述,我提出了以下解决方案,但它在 leetcode 中的一个输入失败了。
class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> list = new ArrayList<Integer>();
int k = p.length();
Map<Character, Integer> m1 = new HashMap<Character, Integer>();// hash map for string p
Map<Character, Integer> m2 = new HashMap<Character, Integer>();//hash map for string s
for (int i = 0; i < p.length(); i++) {
Character c = p.charAt(i);
if (m1.containsKey(c)) {
m1.put(c, m1.get(c) + 1);
} else {
m1.put(c, 1);
}
}
int i = 0, j = 0;
while (j < s.length()) {
Character c = s.charAt(j);
if (m2.containsKey(c)) {
m2.put(c, m2.get(c) + 1);
} else {
m2.put(c, 1);
}
if (j - i + 1 == k) {
boolean isAnagram = true;
for (int m = 0; m < p.length(); m++) {
if (m1.get(p.charAt(m)) != m2.get(p.charAt(m))) {
isAnagram = false;
break;
}
}
if (isAnagram) {
list.add(i);
}
m2.put(s.charAt(i), m2.get(s.charAt(i)) - 1);
i++;
j++;
} else if (j - i + 1 < k) {
j++;
}
}
return list;
}
}
我还确认了当 i = 0 时出现 a 的哈希图中的值是 10000,但它仍然在“if”块内并将“isAnagram”变量设置为“false”。你能告诉我为什么会这样吗?
我能够通过使用此条件解决它 if(!m2.containsKey(p.charAt(m)) || (int)m1.get(p.charAt( m))!=(int)m2.get(p.charAt(m)))
或
if(!m2.containsKey(c1) || m1.get(c1).intValue()!=m2.get(c1).intValue())
Input link for which it is failing
对于给定的问题陈述,我提出了以下解决方案,但它在 leetcode 中的一个输入失败了。
class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> list = new ArrayList<Integer>();
int k = p.length();
Map<Character, Integer> m1 = new HashMap<Character, Integer>();// hash map for string p
Map<Character, Integer> m2 = new HashMap<Character, Integer>();//hash map for string s
for (int i = 0; i < p.length(); i++) {
Character c = p.charAt(i);
if (m1.containsKey(c)) {
m1.put(c, m1.get(c) + 1);
} else {
m1.put(c, 1);
}
}
int i = 0, j = 0;
while (j < s.length()) {
Character c = s.charAt(j);
if (m2.containsKey(c)) {
m2.put(c, m2.get(c) + 1);
} else {
m2.put(c, 1);
}
if (j - i + 1 == k) {
boolean isAnagram = true;
for (int m = 0; m < p.length(); m++) {
if (m1.get(p.charAt(m)) != m2.get(p.charAt(m))) {
isAnagram = false;
break;
}
}
if (isAnagram) {
list.add(i);
}
m2.put(s.charAt(i), m2.get(s.charAt(i)) - 1);
i++;
j++;
} else if (j - i + 1 < k) {
j++;
}
}
return list;
}
}
我还确认了当 i = 0 时出现 a 的哈希图中的值是 10000,但它仍然在“if”块内并将“isAnagram”变量设置为“false”。你能告诉我为什么会这样吗?
我能够通过使用此条件解决它 if(!m2.containsKey(p.charAt(m)) || (int)m1.get(p.charAt( m))!=(int)m2.get(p.charAt(m)))
或
if(!m2.containsKey(c1) || m1.get(c1).intValue()!=m2.get(c1).intValue())