מרץ.21

למצואה מספר אנגרמות במחרוזת

למצואה מספר אנגרמות במחרוזת

יש 2 מחרוזות. יש למצואה את כל האנאגרמות של מחקוזת ראשונה במחרוזת שניה. לדוגמה: מחרוזת ראשונה: "cbaebabacd" מחרוזת שניה: "abc" תשובה: [0,6]

  1. //s: "cbaebabacd" p: "abc"
  2. public IList<int> findAnagrams(string s, string p) {
  3. List<int> result = new List();
  4. int[] map = new int[26];
  5. foreach(char c in p) {
  6. map[c-'a']++;
  7. }
  8. //window sliding technique
  9. //left and right pointer with count
  10. //when count is zero - we found anagram
  11. int left=0, right=0,count=p.Length;
  12. while(right<s.Length) {
  13. //map[right] will be positive only if letter exists as anagram
  14. if(map[s[right++]-'a']-- > 0) count--;
  15. //if count is zero - we found it
  16. if(count == 0) result.Add(left);
  17. //move left if our window length equal to p.lenght
  18. //add 1 back (because it's removed in previous step)
  19. //if map large than zero -> add count back
  20. if(right - left == p.Lenght && map[s[left++]-'a']++>=0) count++;
  21. }
  22. }


תגיות:
שתף את הסיפור הזה:

תגובות(0)

השאירו תגובה

קפטצ'ה לא מתאימה

תגובה