एक स्ट्रिंग से अतिरिक्त रिक्त स्थान निकालें


कठिनाई स्तर आसान
में अक्सर पूछा Capgemini इंफोसिस MAQ ओ 9 के समाधान टीसीएस
तार

समस्या का विवरण

"एक स्ट्रिंग से अतिरिक्त रिक्त स्थान निकालें" समस्या में हमने एक दिया है स्ट्रिंग "एस"। दिए गए स्ट्रिंग से सभी extra_spaces को निकालने के लिए एक प्रोग्राम लिखें।

इनपुट प्रारूप

कुछ स्थानों के साथ एक स्ट्रिंग s वाली पहली और केवल एक पंक्ति।

आउटपुट स्वरूप

सभी extra_spaces को हटाने के बाद एक स्ट्रिंग प्रिंट करें।

की कमी

  • 1 <= | s | <= 10 ^ 6
  • s [i] एक कम केस होना चाहिए अंग्रेजी वर्णमाला, ",", ","।, "?" या अंतरिक्ष ""।

उदाहरण

tutorialcup        is the  best   platform.
tutorialcup is the best platform.

कलन विधि

1. दो बिंदुओं के साथ स्ट्रिंग को पीछे खींचें i, j दोनों स्ट्रिंग की शुरुआत की ओर इशारा करते हैं

2. 'i' पॉइंटर आउटपुट स्ट्रिंग में भरी जाने वाली अगली स्थिति पर नज़र रखता है और 'j' पॉइंटर को सभी वर्णों को एक-एक करके पढ़ना है

3. यदि चरित्र एक गैर-स्थान वर्ण है, तो चरित्र को 'i' पॉइंटर के स्थान पर कॉपी किया जाता है और फिर, i, j दोनों में वृद्धि होती है

4. यदि चरित्र या तो पूर्ण विराम है, प्रश्न चिह्न या अल्पविराम तो किसी पूर्ववर्ती स्थान को हटा दें

5. यदि लगातार दो स्थान हैं, तो केवल एक स्थान को i पॉइंटर में कॉपी करके एक स्थान हटा दें

कार्यान्वयन

स्ट्रिंग से अतिरिक्त रिक्त स्थान निकालने के लिए C ++ प्रोग्राम

#include <iostream>
using namespace std;

int main()
{
  string s;
  getline(cin, s);
  int n = s.length();
  int i = 0, j = -1;
  int flag=0;
  while(++j<n&&s[j]==' ');
  while(j<n)
  {
    if(s[j]!=' ')
    {
      if((s[j]=='.'||s[j]==','||s[j]=='?')&&i-1>=0&&s[i-1]==' ')
        s[i-1]=s[j++];
      else
        s[i++]=s[j++];
      flag=0;
    }
    else if(s[j++]==' ')
    {
      if(!flag)
      {
        s[i++]=' ';
        flag=1;
      }
    }
  }
  if(i<=1)
    s.erase(s.begin() + i, s.end());
  else
    s.erase(s.begin()+i-1,s.end());
  cout<<s;
  return 0;
}

स्ट्रिंग से एक्स्ट्रा स्पेस निकालें के लिए जावा प्रोग्राम

import java.util.Scanner;
class sum
{
    public static void main(String[] args)
    {
        Scanner sr = new Scanner(System.in);
        String s = sr.nextLine();
  int n = s.length();
        char ans[] = new char[n];
  int i = 0, j = -1;
  int flag=0;
  while(++j<n&&s.charAt(j)==' ');
  while(j<n)
  {
    if(s.charAt(j)!=' ')
    {
      if((s.charAt(j)=='.'||s.charAt(j)==','||s.charAt(j)=='?')&&i-1>=0&&s.charAt(i-1)==' ')
        ans[i-1]=s.charAt(j++);
      else
        ans[i++]=s.charAt(j++);
      flag=0;
    }
    else if(s.charAt(j++)==' ')
    {
      if(flag==0)
      {
        ans[i++]=' ';
        flag=1;
      }
    }
  }
        System.out.println(ans);
    }
}
jvsuqs bwdbh, wdv  ud  .
jvsuqs bwdbh, wdv ud.

एक स्ट्रिंग से अतिरिक्त रिक्त स्थान निकालने के लिए जटिलता विश्लेषण

समय जटिलता

पर) जहां n दिए गए तार का आकार "s" है। यहां हम केवल स्ट्रिंग को पीछे छोड़ते हैं और यहां सभी extra_spaces को हटाते हैं।

अंतरिक्ष जटिलता

ओ (1) क्योंकि हम यहाँ किसी भी अतिरिक्त स्थान का उपयोग नहीं करते हैं। बस दिए गए स्ट्रिंग को अपडेट करें और अंतिम अपडेट के बाद इसे प्रिंट करें।