इस एल्गोरिथम को Z एल्गोरिथम नाम दिया गया है, क्योंकि इस एल्गोरिथम में, हमें एक Z सरणी बनाने की आवश्यकता है। Z सरणी का आकार टेक्स्ट आकार के समान है। इस सरणी का उपयोग मुख्य स्ट्रिंग के वर्तमान वर्ण से शुरू होने वाले सबसे लंबे समय तक संभव सबस्ट्रिंग की लंबाई को संग्रहीत करने के लिए किया जाता है। सबसे पहले, पैटर्न और मुख्य पाठ को एक विशेष प्रतीक के साथ जोड़ा जाता है जो पाठ और पैटर्न में मौजूद नहीं होता है। यदि पी पैटर्न है और टी मुख्य पाठ है, तो संयोजन के बाद, यह पी $ टी होगा (मान लें कि पी और टी में $ मौजूद नहीं है)।
इस एल्गोरिथ्म के लिए, समय जटिलता O(m+n) है क्योंकि m पैटर्न की लंबाई है और n मुख्य स्ट्रिंग की लंबाई है।
इनपुट और आउटपुट
इनपुट:मुख्य स्ट्रिंग:"ABAAABCDBBABCDDEBCABC", पैटर्न:"एबीसी" आउटपुट:स्थिति पर पाया गया पैटर्न:स्थिति पर 4 पैटर्न मिला:स्थिति पर 10 पैटर्न मिला:18
एल्गोरिदम
fillZArray (conStr, ZArray)
इनपुट - conStr पैटर्न और मुख्य पाठ की संयुक्त स्ट्रिंग है। सबसे लंबे समय तक संभव सबस्ट्रिंग के इंडेक्स को स्टोर करने के लिए ZArray।
आउटपुट - भरा हुआ ZArray
आरंभ n:=conStr windLeft की लंबाई:=0 और windRight:=0 i के लिए:=1 से n, अगर i> windRight, फिर windLeft:=i और windRight:=i जबकि windRightzAlgorithm(पाठ, पैटर्न)
इनपुट - मुख्य पाठ और खोजने के लिए पैटर्न
आउटपुट - वह स्थान जहाँ पैटर्न पाया जाता है
कॉन्सट्र =कॉन्टेनेट पैटर्न + "$" + टेक्स्ट पेटलेन शुरू करें:=पैटर्न लेन की लंबाई:=कॉन्स्ट्र लंबाई भरने ज़ेडएरे (कॉन्स्ट्र, जेडएरे) i के लिए:=0 से लेन -1, अगर ZArray [i] =patLen, फिर लोकेशन प्रिंट करें i – patLen – 1 didEndउदाहरण
#शामिल करेंनेमस्पेस std का उपयोग करना;void fillZArray(string conStr, int zArr[]) { int n =conStr.size(); इंट विंडलेफ्ट, विंडराइट, के; विंडलेफ्ट =विंडराइट =0; // प्रारंभ में विंडो का आकार 0 के लिए (int i =1; i windRight) {windLeft =windRight =i; // विंडो का आकार 0 है, लेकिन स्थिति i जबकि (windRight आउटपुट
पैटर्न स्थिति में मिला:4Pattern स्थिति पर मिला:10Pattern स्थिति में मिला:18