स्ट्रिंग कम है, तो यह एक बार स्ट्रिंग खोज और समय की संख्या चरित्र प्रकट होता है, तो उस आकार की एक सरणी का आवंटन अप गिनती और स्ट्रिंग खोज दूसरी बार के लिए और अधिक कुशल हो सकता है, सरणी में इंडेक्स रिकॉर्डिंग। यह किसी भी सूची पुन: आवंटन छोड़ देगा।
यह क्या आता है कि स्ट्रिंग कितनी देर तक है और चरित्र कितनी बार प्रकट होता है। यदि स्ट्रिंग लंबा है और चरित्र कुछ बार प्रकट होता है, तो इसे एक बार खोजना और List<int>
पर इंडिविटीज़ जोड़ना तेज होगा। यदि चरित्र कई बार प्रकट होता है, तो स्ट्रिंग को दो बार खोजना (एक बार गिनने के लिए, और एक बार सरणी भरने के लिए) तेजी से हो सकता है। वास्तव में जहां टिपिंग पॉइंट कई कारकों पर निर्भर करता है जिन्हें आपके प्रश्न से नहीं लिया जा सकता है।
आप एक से अधिक विभिन्न पात्रों के लिए स्ट्रिंग खोज और अलग से उन अक्षरों के लिए अनुक्रमित की एक सूची प्राप्त करने की आवश्यकता है, यह एक बार स्ट्रिंग के माध्यम से खोज और के रूप में \0
से एक Dictionary<char, List<int>>
(या एक List<List<int>>
चरित्र ऑफसेट का उपयोग कर निर्माण करने के लिए तेजी से हो सकता है बाहरी सरणी में indicies)।
आखिरकार, आपको बाधाओं को खोजने के लिए अपने आवेदन को बेंचमार्क करना चाहिए। अक्सर जो कोड हम सोचते हैं वह धीरे-धीरे प्रदर्शन करेगा, और हम अपने अधिकांश समय I/O या उपयोगकर्ता इनपुट पर अवरुद्ध करते हैं।
एक चरित्र के लिए यह करने के लिए कोई तेज़ तरीका नहीं है; हालांकि, यदि आप लंबे पैटर्न की खोज कर रहे हैं, तो अलग-अलग एल्गोरिदम मौजूद हैं जो आपको [बॉयर-मूर स्ट्रिंग सर्च एल्गोरिदम] जैसे समय में एक से अधिक वर्ण छोड़ने की अनुमति देते हैं (http://en.wikipedia.org/wiki/Boyer% E2% 80% 93Moore_string_search_algorithm)। –