মনে করুন আমাদের একটি স্ট্রিং s আছে, আমাদের s-এর সাবস্ট্রিং-গুলোর ওপর কোয়েরি করতে হবে। প্রতিটি কোয়েরি queries[i]-তে তিনটি অংশ থাকে [left, right, k]। আমরা সাবস্ট্রিং s[left] থেকে s[right] রি-অ্যারেঞ্জ করতে পারি, এবং তারপর সেগুলোর মধ্যে সর্বোচ্চ k টি ক্যারেক্টার যেকোনো লোয়ারকেস ইংরেজি অক্ষরে রিপ্লেস করতে পারি। যদি উপরের অপারেশনগুলো করার পর সাবস্ট্রিংটি প্যালিনড্রোম হতে পারে, তবে কোয়েরির ফলাফল true, অন্যথায় false। আমাদের একটি answer[] অ্যারে বের করতে হবে, যেখানে answer[i] হলো i-তম কোয়েরি queries[i]-র ফলাফল।
উদাহরণস্বরূপ, ইনপুট যদি "abcda" হয়, এবং কোয়েরি হয় [[3,3,0],[1,2,0],[0,3,1],[0,3,2],[0,4,1]], তবে আউটপুট হবে [true, false, false, true, true]।
এটি সমাধান করতে আমরা নিচের ধাপগুলো ফলো করব:
solveনামক একটি মেথড ডিফাইন করুন, এটিdpম্যাট্রিক্স এবংqনেবে। এটি নিচের মতো কাজ করবে:l := q[0], r := q[1], k := q[2], তারপরlএবংr১ করে বাড়ান,one := 0।for i in range 0 to 25one := one + (dp[r, i] - dp[l - 1, i]) mod 2
trueরিটার্ন করুন, যখনone // 2 <= k, অন্যথায়false।
makeDP()নামক আরেকটি মেথড ডিফাইন করুন, এটিdpম্যাট্রিক্স এবংsনেবে। এটি নিচের মতো কাজ করবে:for i in range 0 to length of sfor j in range 0 to 25dp[i, j] := dp[i - 1, j]
dp[i, ASCII of s[i] - ASCII of 'a']১ বাড়ান।
- মেইন মেথড হবে নিচের মতো:
n := size of string s, s := " " + sdp := (n + 1) x 26 অর্ডারের একটি ম্যাট্রিক্স, ০ দিয়ে পূরণmakeDP(dp, s)কল করুন।res := q-এর লেঞ্জির সমান সাইজের অ্যারে, false দিয়ে পূরণfor i in range 0 to length of q - 1res[i] := solve(dp, q[i])
return res
উদাহরণ (Python)
নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে।
class Solution(object):
def solve(self, dp, q):
l = q[0]
r = q[1]
k = q[2]
r += 1
l += 1
one = 0
for i in range(26):
one += (dp[r][i] - dp[l-1][i]) % 2
return one // 2 <= k
def make_dp(self, dp, s):
for i in range(1, len(s)):
for j in range(26):
dp[i][j] = dp[i-1][j]
dp[i][ord(s[i]) - ord('a')] += 1
def canMakePaliQueries(self, s, q):
n = len(s)
s = " " + s
dp = [[0 for i in range(26)] for j in range(n+1)]
self.make_dp(dp, s)
res = [False for i in range(len(q))]
for i in range(len(q)):
res[i] = self.solve(dp, q[i])
return res
ob = Solution()
print(ob.canMakePaliQueries("abcda", [[3,3,0],[1,2,0],[0,3,1],[0,3,2],[0,4,1]]))
ইনপুট
"abcda" [[3,3,0],[1,2,0],[0,3,1],[0,3,2],[0,4,1]]
আউটপুট
[True, False, False, True, True]