Python3 ծրագիր՝ նիշերը նվազագույնի հասցնելու համար, որը պետք է փոխվի՝ տողի ձախ և աջ պտույտը նույնը դարձնելու համար
Պտտումը նշանակում է, որ մենք պետք է տեղափոխենք յուրաքանչյուր նիշ կամ առաջ կամ ետ: Առաջ ուղղությունը նշանակում է պտտում աջ (Կամ ժամսլաքի հակառակ ուղղությամբ), իսկ հետընթացը նշանակում է ձախ պտույտ (կամ ժամացույցի սլաքի ուղղությամբ):
Այս խնդրի մեջ մենք տվել ենք n չափի տող: Մեր խնդիրն է գտնել փոփոխվող նիշի նվազագույն թիվը՝ ստուգելու համար, թե արդյոք հնարավո՞ր է տողի ձախ և աջ պտույտը կատարել նույնը:
Եկեք տեսնենք ստորև բերված բացատրություններով օրինակներ՝ խնդիրը ավելի լավ հասկանալու համար:
Մուտք 1
str = "wxyz"
Ելք 1
2
Բացատրություն
Լարի ձախ պտույտը xyzw է
Լարի ճիշտ պտույտը zwxy է
Այսպիսով, ըստ դիտարկման, փոխեք նիշը 0 str[0]=w դիրքում դեպի y և 3 str[3]=z դիրքում դեպի x: Շարանը դառնում է yxyx:
Հետևաբար, պատասխանը 2 է, քանի որ ձախ և աջ պտտվող տողը դառնում է xyxy:
Մուտք 2
str = "aka"
Ելք 2
1
Բացատրություն
Լարի ձախ պտույտը aak է
Լարի ճիշտ պտույտը կաա է
Այսպիսով, ըստ դիտարկման, փոխեք նիշը 1 str[1]=k դիրքում դեպի a: Շարանը դառնում է աաա։
Հետևաբար, պատասխանը 1 է, քանի որ ձախ և աջ պտտվող տողը դառնում է aaa:
Մոտեցում
Վերը նշված տողի օրինակը տեսնելուց հետո անցնենք մեթոդին։
Այս մոտեցման գաղափարը հիմնված է դիտարկման վրա: Դիտարկումն ունի երկու կետ.
երբ մենք ունենք զույգ երկարությամբ տող, ապա զույգ ինդեքսում և կենտ ինդեքսում առկա բոլոր նիշերը պետք է լինեն նույնը, որպեսզի ստանանք և՛ աջ, և՛ ձախ պտտվող տողերը:
Երբ մենք ունենք կենտ երկարությամբ տող, ապա տողի բոլոր նիշերը պետք է նույնը լինեն, որպեսզի ստանանք թե՛ աջ, թե՛ ձախ պտտվող տողերը:
Եկեք տեսնենք ստորև բերված կոդը՝ վերը նշված մոտեցման ավելի լավ հասկանալու համար:
Օրինակ
# Function to find the minimum characters to be removed from the string
def getMinimumChange(str, n):
# Initialize answer by N in variable minNum
minChanges = n
# If the length of the string is even
if (n % 2 == 0):
# Created frequency array for Even index
freqEvenIdx = {}
# Created frequency array for odd index
freqOddIdx = {}
# Traverse for loop to intialize both the frequency array freqEvenddIdx and freqOddIdx to 0
for ch in range(ord('a'), ord('z') + 1):
freqEvenIdx[chr(ch)] = 0
freqOddIdx[chr(ch)] = 0
# at odd and even index
for i in range(n):
if (i % 2 == 0):
if str[i] in freqEvenIdx:
freqEvenIdx[str[i]] += 1
else:
if str[i] in freqOddIdx:
freqOddIdx[str[i]] += 1
# Create variable evenIdxMax and OddIdxMax to store maximum frequency of even place character and odd place character respectively
evenIdxMax = 0
oddIdxMax = 0
# Traverse for loop from a to z to update variable evenIdxMax and OddIdxMax
for ch in range(ord('a'), ord('z') + 1):
evenIdxMax = max(evenIdxMax, freqEvenIdx[chr(ch)])
oddIdxMax = max(oddIdxMax, freqOddIdx[chr(ch)])
# Update the answerin variable minChanges
minChanges = minChanges - evenIdxMax - oddIdxMax
# If the length of the string is odd
else:
# Create array to store frequecy of character of the string
freq = {}
# initialize the the freq array
for ch in range('a', 'z'):
freq[chr(ch)] = 0
# Stores the frequency of the characters of the string while traversing the string
for i in range(n):
if str[i] in freq:
freq[str[i]] += 1
# Stores the maximum freuency of character of the string in variable freqMax
freqMax = 0
# Traverse the for loop to update freqMax
for ch in range('a', 'z'):
freqMax = max(freqMax, freq[chr(ch)])
# Update the answer in variable minChanges
minChanges = minChanges - freqMax
# Return final answer minChanges
return minChanges
str = "wxyz" # Given String
n = len(str) # Getting size of the given string
# Call the function to get minimum number of changes to make left and right rotated string same
res = getMinimumChange(str, n)
# Print result
print(
"The minimum number of changes to make the left and right rotated string same are: "
)
print(res)
Արդյունք
The minimum number of changes to make the left and right rotated string same are:
2
Ժամանակի և տարածության բարդություն
Վերոնշյալ կոդի ժամանակային բարդությունը O(N) է, քանի որ մենք անցնում ենք և՛ զսպանակը, և՛ թիվը:
Վերոնշյալ կոդի տիեզերական բարդությունը O(1) է, քանի որ որևէ լրացուցիչ տարածք չի օգտագործվում որևէ բան պահելու համար:
Որտեղ N-ը տողի չափն է:
Եզրակացություն
Այս ձեռնարկում մենք իրականացրել ենք Python3 ծրագիր՝ նվազագույնի հասցնելու նիշերը, որոնք պետք է փոխվեն՝ տողի ձախ և աջ պտույտը նույնը դարձնելու համար: Մենք ներդրել ենք հաշինգի մոտեցում, քանի որ մենք պետք է պահպանենք հաճախականությունը: Ժամանակի բարդությունը O(N) է, իսկ O(1)-ի և N-ի տարածության բարդությունը տվյալ տողի չափն է: