Open lpatmo opened 5 years ago
var findAnagrams = function(s, p) {
const output = [];
for (let i = 0; i < s.length-p.length+1; i++) {
if (p.indexOf(s[i]) > -1) {
let initial = i;
//console.log('initial', i)
let clone = p.slice();
console.log(clone)
//console.∆log('original clone', clone)
for (let j=i; j<p.length+i; j++) {
let exists = clone.indexOf(s[j]);
if (exists > -1 ) {
clone = clone.slice(0,exists) + clone.slice(exists+1);
}
}
//console.log('after', clone)
if (clone.length === 0) {
output.push(initial);
}
}
}
return output;
};
//Alternative:
//Create a freq object for target string
//Build up freq object for each substring
//Compare and output.push(initial) if equal
//{a: 1, b: 2, c:1}
Third alternative:
var findAnagrams = function(s, p) {
let pSorted = p.split("").sort().join("");
const output = [];
for (let i=0; i < s.length-p.length+1; i++) {
if (s.substring(i,i+p.length).split("").sort().join("") === pSorted) {
output.push(i);
}
}
return output;
};
Given a string s and a non-empty string p, find all the start indices of p's anagrams in s.
Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100.
The order of output does not matter.
Example 1:
Input: s: "cbaebabacd" p: "abc"
Output: [0, 6]
Explanation: The substring with start index = 0 is "cba", which is an anagram of "abc". The substring with start index = 6 is "bac", which is an anagram of "abc". Example 2:
Input: s: "abab" p: "ab"
Output: [0, 1, 2]
Explanation: The substring with start index = 0 is "ab", which is an anagram of "ab". The substring with start index = 1 is "ba", which is an anagram of "ab". The substring with start index = 2 is "ab", which is an anagram of "ab".