2 अलग-अलग सरणियाँ बनाएँ लेफ्टडिस और राइटडिस। बाईं दिशा से ले जाने पर लेफ्टडिस वैल्यू को स्टोर करेगा। दाईं ओर से ले जाने पर राइटडिस सबसे छोटा मान संग्रहीत करेगा। जब भी चरित्र मिलता है तो चरित्र की स्थिति को सरणी में जोड़ें। अंतिम चरण में दोनों सरणियों की अधिकतम गणना करें।
समय की जटिलता - ओ(एन)
अंतरिक्ष जटिलता - ओ(एन)
उदाहरण
public class Arrays{ public int[] LongestDistanceToCharacter(string s, char c){ int stringLength = s.Length; int[] leftDis = new int[s.Length]; int[] rightDis = new int[s.Length]; leftDis = Enumerable.Range(0, s.Length).Select(n => int.MinValue).ToArray(); rightDis = Enumerable.Range(0, s.Length).Select(n => int.MaxValue).ToArray(); int count = int.MaxValue; for (int i = 0; i < rightDis.Length; i++){ if (s[i] == c){ count = 0; rightDis[i] = count; } else{ if (count != int.MaxValue){ count++; rightDis[i] = count; } } } count = int.MaxValue; for (int i = leftDis.Length - 1; i >= 0; i--){ if (s[i] == c){ count = 0; leftDis[i] = count; } else{ if (count != int.MaxValue){ count++; leftDis[i] = count; } } } int[] ans = new int[stringLength]; for (int i = 0; i < stringLength - 1; i++){ ans[i] = Math.Max(leftDis[i], rightDis[i]); } return ans; } } static void Main(string[] args){ Arrays s = new Arrays(); string ss = "lovecode"; char c = 'e'; var res = s.LongestDistanceToCharacter(ss, c); foreach (var item in res){ Console.WriteLine(item); } }
आउटपुट
[2147483647,2147483647,2147483647,0,3,2,3,0]