उदाहरण के लिए स्ट्रिंग ए = "एबीसीडी" तो उत्तर {ए, एबी, एबीसी, एबीसीडी, बी, बीसी, बीसीडी, सी, सीडी, डी} होना चाहिए (मुझे नहीं पता कि यह क्या है सब-स्ट्रिंग नहीं कहा जाता है या लेकिन मैं तो यह सोचते हैं रहा हूँ ...)सबसे तेज़ तरीके से सभी संभावित सबस्ट्रिंग
सब-स्ट्रिंग मैं का इस्तेमाल किया है विधि
for (int i = 0; i < A.length(); i++) {
for (int j = i+1; j <= A.length(); j++) {
System.out.println(A.substring(i,j));
}
}
निम्नलिखित जानने के लिए लेकिन मेरी समझ के अनुसार यह करने के लिए एन^2 हम कर सकते हैं चला जाता है यह तेज़ी से मैंने गंभीर सवाल उठाया और प्रत्यय पेड़ http://allisons.org/ll/AlgDS/Tree/Suffix/ के लिए लिंक था लेकिन यह मेरी समस्या को हल करने के लिए प्रतीत नहीं होता .... आउटपुट जो मुझे प्रत्यय पेड़ से मिलता है {1: abcd 2: बीसीडी 3: सीडी 4: डी} क्या कोई भी ऐसा करने के लिए सबसे तेज़ तरीका खोजने में मेरी सहायता कर सकता है? रैखिक समय की तरह कुछ? अग्रिम धन्यवाद .....
आप संभवतः ओ (एन^2) से तेज़ संभव नहीं कर सकते हैं ताकि प्रत्येक संभावित सबस्ट्रिंग के प्रारंभिक और समापन बिंदु भी सूचीबद्ध हो सकें, क्योंकि ओ (एन^2) ऐसे सबस्ट्रिंग्स हैं! यदि आप प्रत्येक सबस्ट्रिंग को पूर्ण रूप से प्रिंट करना चाहते हैं (जैसा कि आप वर्तमान में कर रहे हैं), तो समय जटिलता ओ (एन^3) तक जाती है क्योंकि प्रत्येक सबस्ट्रिंग को मुद्रित करने के लिए समग्र स्ट्रिंग लंबाई के लिए आनुपातिक समय लगता है। –
यह भी ध्यान दें कि खाली स्ट्रिंग एक मान्य सबस्ट्रिंग भी है। – Philip
यदि आप सबस्ट्रिंग्स के सेट पर कोई क्वेरी चलाने जा रहे हैं तो आप इसे केवल तेज़ी से बना सकते हैं जो उन सभी को "स्पर्श" नहीं करता है। उन्हें प्रिंट करना उन सभी को छूता है। अगर आप पूछना चाहते हैं, तो कहें, "कम से कम दो बार दिखाई देने वाली सबसे लंबी सबस्ट्रिंग क्या है" या "के वर्णों से अधिक की कौन सी सबस्ट्रिंग अक्सर होती है", तो आप सभी सबस्ट्रिंग्स (प्रत्यय पेड़ के साथ) को समझाए बिना ऐसा कर सकते हैं। – harold