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) | छोटी स्ट्रिंग्स, कोई एक्स्ट्रा स्पेस नहीं |
| HashSet | O(n) | O(min(n, चरसेट)) | सामान्य उपयोग, यूनिकोड |
| बूल एरे | O(n) | O(1) - 128/256 बाइट्स | केवल ASCII/Extended ASCII |