मान लीजिए हमारे पास एक स्ट्रिंग s और एक और कैरेक्टर c है, c, s में मौजूद होना चाहिए, हमें एक लिस्ट ढूंढनी है जिसकी लंबाई s की लंबाई के समान हो जहां प्रत्येक इंडेक्स i के लिए इसका मान s[i] से c की निकटतम दूरी पर सेट हो।
उदाहरण के लिए, यदि इनपुट है s = "ppqppq", c = "q", तो आउटपुट होगा [2, 1, 0, 1, 1, 0]।
समाधान दृष्टिकोण
बाएं से दाएं स्कैन करें, अंतिम देखे गए c के इंडेक्स को ट्रैक करें। प्रत्येक पोजीशन के लिए, वर्तमान c से दूरी की गणना करें और पिछले c से दूरी के साथ न्यूनतम अपडेट करें।
j = len(s),d = [j-1] * j,x = s.index(c)आरंभ करें।- प्रत्येक
iके लिए 0 सेj-1तक:- यदि
s[i] == cऔरi > x, तोx = iअपडेट करें और पिछले इंडेक्स के लिए पीछे की ओर दूरी अपडेट करें। d[i] = abs(x - i)सेट करें।
- यदि
dलौटाएं।
पायथन कार्यान्वयन
def solve(s, c):
j = len(s)
d = [j - 1] * j
x = s.index(c)
for i in range(j):
if s[i] == c and i > x:
x = i
ind = 1
while True:
if d[x - ind] > ind:
d[x - ind] = ind
else:
break
ind += 1
d[i] = abs(x - i)
return d
s = "ppqppq"
c = "q"
print(solve(s, c))
इनपुट
"ppqppq", "q"
आउटपुट
[2, 1, 0, 1, 1, 0]