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

C में पॉइंटर्स का उपयोग करके जांचें कि स्ट्रिंग पालिंड्रोम है या नहीं

C में पॉइंटर्स का उपयोग करके किसी स्ट्रिंग की जांच करना कि वह पालिंड्रोम है या नहीं। एक पालिंड्रोम वह स्ट्रिंग है जो आगे और पीछे से समान पढ़ी जाती है (जैसे "racecar", "madam")।

एल्गोरिदम

  1. length := स्ट्रिंग का आकार
  2. forward := स्ट्रिंग के पहले वर्ण की ओर इंगित करता है
  3. reverse := स्ट्रिंग के अंतिम वर्ण की ओर इंगित करता है
  4. reverse >= forward स्थिति तक लूप करें:
    • यदि reverse द्वारा इंगित वर्ण forward द्वारा इंगित वर्ण के समान है:
      • forward बढ़ाएं, reverse घटाएं
    • अन्यथा: लूप से बाहर निकलें
  5. यदि forward >= reverse: सत्य लौटाएं (पालिंड्रोम है)
  6. अन्यथा: असत्य लौटाएं

C प्रोग्राम

#include <stdio.h>
#include <string.h>

int solve(char *string) {
    int length;
    char *forward, *reverse;
    
    length = strlen(string);
    forward = string;
    reverse = forward + length - 1;
    
    for(forward = string; reverse >= forward; ) {
        if(*reverse == *forward) {
            reverse--;
            forward++;
        } else {
            break;
        }
    }
    
    if(forward > reverse)
        return 1;  // पालिंड्रोम है
    else
        return 0;  // पालिंड्रोम नहीं
}

int main() {
    char string[] = "racecar";
    printf("%d\n", solve(string));  // 1 (सत्य)
    
    char str2[] = "hello";
    printf("%d\n", solve(str2));    // 0 (असत्य)
    
    return 0;
}

आउटपुट

1
0

चरण-दर-चरण ट्रेस ("racecar" के लिए)

चरणforwardreverseतुलनाकार्य
1r (इंडेक्स 0)r (इंडेक्स 6)r == r ✓forward++, reverse--
2a (1)a (5)a == a ✓forward++, reverse--
3c (2)c (4)c == c ✓forward++, reverse--
4e (3)e (3)e == e ✓forward++, reverse--
5इंडेक्स 4इंडेक्स 2forward > reverseलूप समाप्त, 1 लौटाएं

समय और स्थान जटिलता

  • समय: O(n) - n स्ट्रिंग की लंबाई है
  • स्थान: O(1) - केवल दो पॉइंटर्स उपयोग करता है

केस-इन्सेंसिटिव संस्करण

#include <ctype.h>

int solveCaseInsensitive(char *string) {
    char *forward = string;
    char *reverse = string + strlen(string) - 1;
    
    while(forward < reverse) {
        if(tolower(*forward) != tolower(*reverse))
            return 0;
        forward++;
        reverse--;
    }
    return 1;
}

मुख्य बिंदु

  • दो-पॉइंटर तकनीक: एक शुरुआत से, एक अंत से
  • कोई अतिरिक्त मेमोरी आवंटन नहीं (O(1) स्थान)
  • प्रारंभिक समाप्ति: पहला बेमेल मिलने पर रुक जाता है
  • पॉइंटर अंकगणित C में स्ट्रिंग मैनिपुलेशन के लिए कुशल है
  1. C प्रोग्राम: रिकर्सन का उपयोग करके जांचें कि सरणी पैलिंड्रोम है या नहीं C प्रोग्राम: रिकर्सन का उपयोग करके जांचें कि सरणी पैलिंड्रोम है या नहीं

    पैलिंड्रोम सरणी एक सरणी पैलिंड्रोम होती है यदि यह आगे और पीछे से समान पढ़ी जाए। उदाहरण: {1, 2, 3, 2, 1} ✓, {1, 0, 0, 1} ✓, {1, 2, 3, 4} ✗ रिकर्सिव दृष्टिकोण आधार मामला: यदि = end → पैलिंड्रोम (true) जांच: यदि arr[start] != arr[end] → पैलिंड्रोम नहीं (false) रिकर्सन: start+1 और end-1 के साथ कॉल करे

  1. C++ में STL का उपयोग करके जांचें कि क्या सरणी पैलिंड्रोम है या नहीं C++ में STL का उपयोग करके जांचें कि क्या सरणी पैलिंड्रोम है या नहीं

    n पूर्णांकों की एक सरणी arr[n] दी गई है, कार्य यह जांचना है कि क्या सरणी एक पैलिंड्रोम है या नहीं। हमें C++ में STL (स्टैंडर्ड टेम्पलेट लाइब्रेरी) का उपयोग करके यह कार्य करना है। C++ में STL (Standard Template Library) की एक विशेषता है, यह C++ टेम्पलेट कक्षाओं का एक समूह है जिसका उपयोग डेटा संरचना

  1. - Python का उपयोग करके स्ट्रिंग पैलिंड्रोम है या नहीं जांचें

    Python में पैलिंड्रोम स्ट्रिंग जांचना Python के मानक पुस्तकालय से reveresed() फ़ंक्शन का उपयोग करें। यह उल्टा ऑब्जेक्ट लौटाता है जिसे सूची ऑब्जेक्ट में बदला जा सकता है। >>> str1 = malayalam >>> l1 = list(reversed(str1)) >>> l1 [m, a, l, a, y, a, l, a, m] join() मेथड का उ