पैनाग्राम (Pangram) एक ऐसा वाक्य है जिसमें वर्णमाला के सभी 26 अक्षर कम से कम एक बार आते हैं।
प्रसिद्ध उदाहरण
"The quick brown fox jumps over the lazy dog"
इसमें a से z तक सभी अक्षर हैं।
उदाहरण: LINQ के साथ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Demo {
public class Program {
public static void Main(string[] args) {
string str = "The quick brown fox jumps over the lazy dog";
Console.WriteLine("{0}: \"{1}\" is pangram", CheckPangram(str), str);
Console.ReadKey();
}
static bool CheckPangram(string str) {
return str.ToLower()
.Where(ch => char.IsLetter(ch))
.GroupBy(ch => ch)
.Count() == 26;
}
}
}
आउटपुट
True: "The quick brown fox jumps over the lazy dog" is pangram
कोड व्याख्या
ToLower()- केस-इनसेंसिटिव तुलना के लिएWhere(ch => char.IsLetter(ch))- केवल अक्षर फिल्टर करें (स्पेस, विराम चिह्न हटाएं)GroupBy(ch => ch)- अद्वितीय अक्षरों में समूहित करेंCount()- अद्वितीय अक्षरों की गिनती== 26- अंग्रेजी वर्णमाला के 26 अक्षरों से तुलना
अधिक कुशल दृष्टिकोण: HashSet
public static bool IsPangram(string str) {
var letters = new HashSet();
foreach (char c in str.ToLower()) {
if (char.IsLetter(c)) letters.Add(c);
if (letters.Count == 26) return true; // जल्दी निकलें
}
return false;
}
बिटमास्क दृष्टिकोण (सबसे तेज, O(n) समय, O(1) स्थान)
public static bool IsPangramBitmask(string str) {
int mask = 0;
const int ALL_LETTERS = (1 << 26) - 1; // 0x3FFFFFF = 26 बिट्स सेट
foreach (char c in str) {
if (c >= 'a' && c <= 'z')
mask |= 1 << (c - 'a');
else if (c >= 'A' && c <= 'Z')
mask |= 1 << (c - 'A');
if (mask == ALL_LETTERS) return true;
}
return mask == ALL_LETTERS;
}
पैनाग्राम के प्रकार
- परफेक्ट पैनाग्राम: प्रत्येक अक्षर ठीक एक बार (26 अक्षर कुल) - अत्यंत दुर्लभ
- सामान्य पैनाग्राम: प्रत्येक अक्षर कम से कम एक बार
- सेल्फ-एन्यूमरेटिंग पैनाग्राम: अपनी अक्षर गिनती का वर्णन करता है
अन्य भाषाओं के लिए
// यूनिकोड वर्णमाला के लिए (सामान्यीकृत)
public static bool IsPangramUnicode(string str, string alphabet) {
var letters = new HashSet(alphabet.ToLower());
foreach (char c in str.ToLower()) {
letters.Remove(c);
if (letters.Count == 0) return true;
}
return false;
}