Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में जांचें कि वर्णों की आवृत्ति रिकैमन श्रृंखला में है या नहीं


मान लीजिए हमारे पास एक लोअरकेस स्ट्रिंग s है। हमें जांचना है कि s में वर्णमाला की घटनाएं, किसी भी संभावित तरीके से पुनर्व्यवस्थित करने पर, रिकैमन अनुक्रम उत्पन्न करती हैं या नहीं (पहले पद को अनदेखा करते हुए)।

रिकैमन अनुक्रम इस प्रकार है:

$$a_{n}=\begin{cases}\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:0(if\:n=0) & \\a_{n-1}-n(if\:a_{n}-n>0\wedge not\:present\in sequence) & \\\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:a_{n-1}+n(otherwise)\end{cases}$$

रिकैमन अनुक्रम के कुछ आइटम हैं [0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9, 24,...] (पहला पद अनदेखा किया गया है क्योंकि यह 0 है)

इसलिए, यदि इनपुट s = "pppuvuuqquuu" है, तो आउटपुट True होगा क्योंकि वर्ण और आवृत्तियां (p, 3), (u, 6), (v, 1) और (q, 2) हैं। तो आवृत्तियां रिकैमन अनुक्रम के पहले कुछ पदों [1, 3, 6, 2] का निर्माण कर रही हैं।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:

  • freq := s में सभी वर्णों और उनकी आवृत्तियों को रखने वाला मैप
  • n := freq का आकार
  • array := पहले n रिकैमन अनुक्रम पद
  • f := 1
  • freq में प्रत्येक char के लिए, करें
    • is_found := 0
    • j के लिए 1 से n तक की रेंज में, करें
      • यदि freq[keys], array[j] के समान है, तो
        • is_found := 1
        • लूप से बाहर आएं
    • यदि is_found गलत है, तो
      • f := 0
      • लूप से बाहर आएं
  • True लौटाएं जब f सेट हो अन्यथा False

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

from collections import defaultdict
def recaman(array, n):
    array[0] = 0
    for i in range(1, n + 1):
        temp = array[i - 1] - i
        for j in range(i):
            if array[j] == temp or temp < 0:
                temp = array[i - 1] + i
                break
        array[i] = temp
def solve(s):
    freq = defaultdict(int)
    for i in range(len(s)):
        freq[s[i]] += 1
    n = len(freq)
    array = [0] * (n + 1)
    recaman(array, n)
    f = 1
    for keys in freq.keys():
        is_found = 0
        for j in range(1, n + 1):
            if freq[keys] == array[j]:
                is_found = 1
                break
        if not is_found:
            f = 0
            break
    return True if f else False
s = "pppuvuuqquuu"
print(solve(s))

इनपुट

"pppuvuuqquuu"

आउटपुट

True

  1. - Python में जांचें कि क्या दो सूचियाँ समान हैं

    Python डेटा विश्लेषण में, हम ऐसी स्थिति का सामना कर सकते हैं जब हमें दो सूचियों की तुलना करने और यह पता लगाने की आवश्यकता होती है कि क्या वे समान हैं यानी समान तत्व हैं या नहीं।उदाहरणlistA = [Mon,Tue,Wed,Thu] listB = [Mon,Wed,Tue,Thu] # दी गई सूचियाँ print(Given listA: ,listA) print(Given listB: ,li

  1. - Python में जांचें कि स्ट्रिंग के सभी वर्णों की आवृत्तियाँ भिन्न हैं या नहीं

    इस लेख में हम देखेंगे कि दिए गए स्ट्रिंग में प्रत्येक वर्ण की आवृत्ति कैसे निकाली जाए। फिर देखेंगे कि क्या दिए गए स्ट्रिंग में दो या अधिक वर्णों की आवृत्ति समान है या नहीं। हम इसे दो चरणों में पूरा करेंगे। पहले प्रोग्राम में हम केवल प्रत्येक वर्ण की आवृत्ति निकालेंगे। प्रत्येक वर्ण की आवृत्ति यहाँ ह

  1. - पायथन - जांचें कि लिस्ट में सभी तत्व समान हैं या नहीं

    कभी-कभी हमें यह जांचने की आवश्यकता होती है कि क्या लिस्ट में एक ही मान सभी तत्वों के रूप में दोहराया गया है। हम नीचे दिए गए पायथन प्रोग्राम का उपयोग करके ऐसे परिदृश्य की जांच कर सकते हैं। अलग-अलग दृष्टिकोण हैं। for लूप का उपयोग इस विधि में हम लिस्ट से पहला तत्व लेते हैं और पारंपरिक for लूप का उपयोग