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

C# में स्ट्रिंग के सभी कैरेक्टर्स यूनिक हैं या नहीं जांचें

C# में स्ट्रिंग के सभी कैरेक्टर्स यूनिक हैं या नहीं जांचना

यह एक सामान्य एल्गोरिदमिक समस्या है। हम दो दृष्टिकोण देखेंगे: नेस्टेड लूप (O(n²)) और HashSet (O(n))।

दृष्टिकोण 1: नेस्टेड लूप (ब्रूट फोर्स)

प्रत्येक कैरेक्टर की तुलना बाद के सभी कैरेक्टर्स से करें।

public static bool AreAllCharsUniqueBruteForce(string str) {
    if (string.IsNullOrEmpty(str)) return true;
    
    for (int i = 0; i < str.Length; i++) {
        for (int j = i + 1; j < str.Length; j++) {
            if (str[i] == str[j]) {
                return false; // डुप्लिकेट मिला
            }
        }
    }
    return true; // कोई डुप्लिकेट नहीं
}

दृष्टिकोण 2: HashSet (इष्टतम O(n))

HashSet<char> का उपयोग करके देखे गए कैरेक्टर्स ट्रैक करें।

public static bool AreAllCharsUniqueHashSet(string str) {
    if (string.IsNullOrEmpty(str)) return true;
    
    var seen = new HashSet<char>();
    foreach (char c in str) {
        if (!seen.Add(c)) { // Add false लौटाता है अगर पहले से मौजूद है
            return false;
        }
    }
    return true;
}

दृष्टिकोण 3: बूलियन एरे (ASCII के लिए O(n), O(1) स्पेस)

अगर स्ट्रिंग केवल ASCII (128 कैरेक्टर्स) है:

public static bool AreAllCharsUniqueAscii(string str) {
    if (str.Length > 128) return false; // कबूतरघर सिद्धांत
    
    bool[] charSet = new bool[128];
    foreach (char c in str) {
        int val = c;
        if (charSet[val]) return false;
        charSet[val] = true;
    }
    return true;
}

पूर्ण प्रोग्राम उदाहरण

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        string[] testCases = { "abcdef", "hello", "", "AaBbCc", "1234567890" };
        
        foreach (string s in testCases) {
            bool unique = AreAllCharsUniqueHashSet(s);
            Console.WriteLine($"\"{s}\" -> {(unique ? "Unique" : "Duplicate found")}");
        }
    }

    static bool AreAllCharsUniqueHashSet(string str) {
        if (string.IsNullOrEmpty(str)) return true;
        var seen = new HashSet<char>();
        foreach (char c in str) {
            if (!seen.Add(c)) return false;
        }
        return true;
    }
}

आउटपुट

"abcdef" -> Unique
"hello" -> Duplicate found
"" -> Unique
"AaBbCc" -> Unique
"1234567890" -> Unique

LINQ वन-लाइनर (कम कुशल)

bool unique = str.Distinct().Count() == str.Length;

सारांश

विधिसमय जटिलतास्पेस जटिलताउपयुक्त
नेस्टेड लूपO(n²)O(1)छोटी स्ट्रिंग्स, कोई एक्स्ट्रा स्पेस नहीं
HashSetO(n)O(min(n, चरसेट))सामान्य उपयोग, यूनिकोड
बूल एरेO(n)O(1) - 128/256 बाइट्सकेवल ASCII/Extended ASCII
  1. - C# का उपयोग करके स्ट्रिंग की लंबाई कैसे कैलकुलेट करें

    C# में स्ट्रिंग की लंबाई प्राप्त करने के लिए String.Length प्रॉपर्टी का उपयोग करें। str.Length यह प्रॉपर्टी स्ट्रिंग में शब्दों की गणना करती है और निर्दिष्ट स्ट्रिंग की लंबाई प्रदर्शित करती है, उदाहरण के लिए, स्ट्रिंग Amit में 4 कैरेक्टर्स हैं - string str = Amit; उदाहरण निम्नलिखित स्ट्रिंग लंबाई कै

  1. - Java में नियमित अभिव्यक्ति का उपयोग करके स्ट्रिंग के सभी वर्ण प्रिंट करना

    मेटा कैरेक्टर . सभी वर्णों से मेल खाता है, नियमित अभिव्यक्तियों का उपयोग करके सभी वर्णों को प्रिंट करने के लिए: compile() विधि का उपयोग करके नियमित अभिव्यक्ति संकलित करें। matcher() विधि का उपयोग करके मिलानकर्ता ऑब्जेक्ट बनाएं। find() विधि का उपयोग करके मिलान खोजें और प्रत्येक मिलान के लिए group(

  1. - Java का उपयोग करके स्ट्रिंग में यूनिक कैरेक्टर कैसे खोजें?

    आप निम्नलिखित तरीकों से पता लगा सकते हैं कि दी गई स्ट्रिंग में निर्दिष्ट कैरेक्टर मौजूद है या नहीं: indexOf() विधि का उपयोग करके आप String क्लास की indexOf() विधि का उपयोग करके स्ट्रिंग में किसी विशेष अक्षर को खोज सकते हैं। यह विधि एक इंटीजर पैरामीटर लौटाती है जो स्ट्रिंग के भीतर शब्द की पोजीशन इं