যদি একটি স্ট্রিং টি এর দৈর্ঘ্যের K কে স্ট্রিং এস-তে K বা একাধিকবার প্রদর্শিত হয় , তবে এটি সম্ভাব্য সাম্যবাদী । উদাহরণস্বরূপ, 10মধ্যে 10/10সম্ভাব্য সাম্যবাদী, কারণ এটি 2 বার প্রদর্শিত হয় এবং দৈর্ঘ্য 2 হয় । নোট করুন যে এই সাবস্ট্রিংগুলি ওভারল্যাপ করতে পারে না।
একজন সাম্যবাদসম্বন্ধীয় রূপান্তর এক যে এই স্ট্রিং লাগে টি এবং প্রতিটি অক্ষর চলে আসে টন আমি এর টি থেকে আমি এর সংঘটন টি মধ্যে এস । সুতরাং, পূর্ববর্তী উদাহরণের জন্য, সাম্যবাদী রূপান্তর লাভ করবে 1/0; প্রথম গৃহস্থালির কাজ 10প্রতিস্থাপিত 10প্রথমবার 10পাওয়া যায়, এবং 0দ্বিতীয় সময়।
একজন সাম্যবাদসম্বন্ধীয় নিয়মমাফিককরণ একটি ফাংশন যে এই ধরনের সব স্ট্রিং লাগে টি দিয়ে কে ≥ 2 এবং সঞ্চালিত একটি সাম্যবাদসম্বন্ধীয় রূপান্তর তাদের উপর।
অ্যালগরিদমের কিছু নির্দিষ্টকরণ:
- প্রথমে দীর্ঘতম বৈধ স্ট্রিং টি তে সাম্যবাদী রূপান্তর সম্পাদন করুন । টি এর প্রথম উপস্থিতি পছন্দ করুন ।
- তারপরে, পরবর্তী-দীর্ঘতম স্ট্রিংগুলিতে সাম্যবাদী রূপান্তর সম্পাদন করুন, তারপরে পরবর্তী-পরবর্তী-দীর্ঘতম ... ইত্যাদি
- স্ট্রিং এ জাতীয় স্ট্রিং উপস্থিত না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।
নোট করুন যে কয়েকটি স্ট্রিং, যেমন পরীক্ষার ক্ষেত্রে "হ্যালো, হ্যালো" উদাহরণকে দুটি ভিন্ন উপায়ে ব্যাখ্যা করা যায়। আপনি টি এরell জন্য ব্যবহার করতে পারেন তবে আপনি এটি ব্যবহার করতে পারেন । এই ক্ষেত্রে, আপনার কোড যে কোনও বিকল্প চয়ন করতে পারে। দেখানো পরীক্ষার কেসটি ব্যবহার করে তবে আপনি আলাদা এবং সমানভাবে বৈধ আউটপুট পেতে পারেন। llollo
আপনার কাজটি কমিউনিস্ট নরমালাইজেশন বাস্তবায়ন করা। ইনপুটটিতে কেবল মুদ্রণযোগ্য ASCII অক্ষর (0x20 থেকে 0x7E, স্থান থেকে টিলডে) থাকবে। এই কাজটি সমাধান করার জন্য আপনি কোনও প্রোগ্রাম বা ফাংশন লিখতে পারেন; ইনপুটটি STDIN, স্ট্রিং / চরিত্রের অ্যারে আর্গুমেন্ট, এআরজিভি থেকে আর্গুমেন্ট ইত্যাদি থেকে নেওয়া যেতে পারে line
পরীক্ষার মামলা
'123' -> '123'
'111' -> '111'
'1111' -> '11'
'ABAB' -> 'AB'
'111111111' -> '111'
'asdasdasd' -> 'asd'
'10/10' -> '1/0'
'100/100+100' -> '1/0+0'
' + + ' -> ' + '
'Hello, hello, dear fellow!' -> 'Hel he, dear feow!' OR 'Heo hl, dear flow!'
'11122333/11122333/11122333' -> '112/13' OR '132/23'
'ababab1ababab' -> 'a1bab'
'1ab2ab3ab4ab5ab6' -> '1a2b3a4b5ab6'
পরীক্ষার কেস কাজ করেছে
বিন্যাসটি 'string', 'substring'প্রতিস্থাপনের প্রতিটি ধাপে। প্রতিস্থাপন বিট বন্ধনী করা হয়।
'11[122]333/11[122]333/11[122]333', '122'
'111[333]/112[333]/112[333]', '333'
'1113/11[23]/11[23]', '23'
'11[13]/112/1[13]', '13'
'1[11]/[11]2/13', '11'
'1[/1]12[/1]3', '/1'
'112/13', ''
আরেকটি পরীক্ষার কেস:
'Hello, hello, dear fellow!', 'llo'
'Hel, hel, dear feow!', 'l,'
'Hel he, dear feow!', ''
রেফারেন্স কোড (পাইথন)
অ্যালগরিদমটি কল্পনা করতে আপনি এটি দরকারী খুঁজে পেতে পারেন।
#!/usr/bin/env python
import re
def repeater(string):
def repeating_substring(substring):
return (string.count(substring) == len(substring)) and string.count(substring) > 1
return repeating_substring
def get_substrings(string):
j = 1
a = set()
while True:
for i in range(len(string) - j+1):
a.add(string[i:i+j])
if j == len(string):
break
j += 1
return list(a)
def replace_each_instance(string, substring):
assert `string`+',', `substring`
for i in substring:
string = re.sub(re.escape(substring), i, string, 1)
return string
def main(s):
repeats = repeater(s)
repeating_substr = filter(repeater(s), get_substrings(s))
while repeating_substr:
repeating_substr.sort(lambda x,y: cmp(len(y), len(x)))
s = replace_each_instance(s, repeating_substr[0])
repeating_substr = filter(repeater(s), get_substrings(s))
return s
assert main('123') == '123'
assert main('111') == '111'
assert main('1111') == '11'
assert main('ABAB') == 'AB'
assert main('111111111') == '111'
assert main('asdasdasd') == 'asd'
assert main('10/10') == '1/0'
assert main('100/100+100') == '1/0+0'
assert main(' + + ') == ' + '
assert main('Hello, hello, dear fellow!') == 'Hel he, dear feow!'
assert main('11122333/11122333/11122333') == '112/13'
এই চ্যালেঞ্জটির আসল ধারণা পোস্ট করার জন্য @ কনোরো ব্রায়েনকে ধন্যবাদ Thanks
abউভয় স্ট্রিংয়ে কমপক্ষে দুবার ঘটে।
ababab1ababab,1ab2ab3ab4ab5ab6