কম্পিউটার টিউটোরিয়াল

'?' সিম্বল রিপ্লেস করে কনসিকিউটিভ রিপিটিং ক্যারেক্টার এড়াতে প্রোগ্রাম

একটি লোয়ারকেস স্ট্রিং s দেওয়া আছে যাতে শুধু অক্ষর এবং '?' রয়েছে। সব '?' কে লোয়ারকেস লেটারে রিপ্লেস করতে হবে যাতে ফাইনাল স্ট্রিং-এ কোনো দুটি সন্নিহিত ক্যারেক্টর একই নয়। একাধিক সমাধান থাকলে যেকোনো একটি দিন।

ইনপুট: s = "hel??" → আউটপুট: helab। প্রথম '?' 'l' ছাড়া যেকোনো কিছু (এখানে 'a'), দ্বিতীয় '?' 'a' ছাড়া যেকোনো কিছু (এখানে 'b')।

সমাধানের ধাপসমূহ

  • যদি len(s) == 1: '?' হলে 'a' রিটার্ন, অন্যথায় s রিটার্ন

  • s কে লিস্টে কনভার্ট করুন

  • প্রতিটি i = 0 থেকে len(s)-1:

    • যদি s[i] == '?':
      • i==0 এবং s[1]=='?': s[0]='a'
      • i==0 এবং s[1]=='a': s[0]='b'
      • i==0: s[0]='a'
      • i==last এবং s[i-1]=='a': s[i]='b'
      • i==last: s[i]='a'
      • s[i-1]=='a' এবং s[i+1]=='?': s[i]='b'
      • s[i+1]=='?': s[i]='a'
      • (s[i-1]=='a' এবং s[i+1]=='b') বা (s[i-1]=='b' এবং s[i+1]=='a'): s[i]='c'
      • 'a' ∈ (s[i-1], s[i+1]): s[i]='b'
      • অন্যথায়: s[i]='a'
  • জয়েন করে রিটার্ন করুন

উদাহরণ (Python)

def solve(s):
    if len(s) == 1:
        if s == "?": return "a"
        return s
    s = list(s)
    for i in range(len(s)):
        if s[i] == "?":
            if i == 0 and s[i+1] == "?": s[i] = "a"
            elif i == 0 and s[i+1] == "a": s[i] = "b"
            elif i == 0: s[i] = "a"
            elif i == len(s)-1 and s[i-1] == "a": s[i] = "b"
            elif i == len(s)-1: s[i] = "a"
            elif s[i-1] == "a" and s[i+1] == "?": s[i] = "b"
            elif s[i+1] == "?": s[i] = "a"
            elif (s[i-1] == "a" and s[i+1] == "b") or (s[i-1] == "b" and s[i+1] == "a"): s[i] = "c"
            elif "a" in (s[i-1], s[i+1]): s[i] = "b"
            else: s[i] = "a"
    return "".join(s)

s = "hel??"
print(solve(s))

ইনপুট

"hel??"

আউটপুট

helab
  1. পাইথনে স্ট্রিং-এ সব ক্যারেক्टर ইউনিক কিনা চেক করা

  2. পাইথনে স্ট্রিং-এ ডুপ্লিকেট ক্যারেক্টার খুঁজে বের করার প্রোগ্রাম

  3. পাইথন প্রোগ্রাম: স্ট্রিং-এ মিরর ক্যারেক্টার বের করা

  4. পাইথনে একটি লিস্টের সব সাবলিস্ট প্রিন্ট করার প্রোগ্রাম