فضاهای اضافی را از یک رشته حذف کنید  


سطح دشواری ساده
اغلب در Capgemini Infosys در MAQ o9 راه حل TCS
رشته

بیان مسأله  

در مسئله "حذف فضاهای اضافی از یک رشته" ما یک رشته "s" برای حذف تمام فضای اضافی از رشته داده شده ، برنامه ای بنویسید.

قالب ورودی  

اولین و تنها یک خط حاوی یک رشته s با برخی فاصله ها.

فرمت خروجی  

پس از حذف تمام فضای اضافی ، یک رشته را چاپ کنید.

محدودیت ها  

  • 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.

تجزیه و تحلیل پیچیدگی برای حذف فضاهای اضافی از یک رشته  

پیچیدگی زمان

O (N) جایی که n اندازه رشته داده شده "s" است. در اینجا ما به سادگی رشته را رد می کنیم و تمام فضای اضافی را در اینجا حذف می کنیم.

همچنین مشاهده کنید
راه حل معتبر Leetcode بومرنگ

پیچیدگی فضا

O (1) زیرا ما در اینجا از فضای اضافی استفاده نمی کنیم. به سادگی رشته داده شده را به روز کنید و در نهایت پس از به روزرسانی های نهایی آن را چاپ کنید.