📜  反转字符串保留空间位置

📅  最后修改于: 2022-05-13 01:57:07.622000             🧑  作者: Mango

反转字符串保留空间位置

编写一个程序来反转给定的字符串,同时保留空格的位置。

例子:

Input  : "abc de"
Output : edc ba

Input : "intern at geeks"
Output : skeegt an retni

Input : "Help others"
Output : sreh topleH

  1. 创建一个字符串来存储结果。标记给定字符串在此字符串中的空格位置。
  2. 将输入字符串中的字符以相反的顺序插入到结果字符串中。
  3. 插入字符时,检查结果字符串是否在索引“j”处已包含空格。如果它包含,我们将字符复制到下一个位置。

下面是上述步骤的实现。

C++
// C++ program to reverse a string preserving
// spaces.
#include 
using namespace std;
 
// Function to reverse the string
// and preserve the space position
string reverses(string str)
{
    // Mark spaces in result
    int n = str.size();
    string result(n, '\0');
    for (int i = 0; i < n; i++)
        if (str[i] == ' ')
            result[i] = ' ';
 
    // Traverse input string from beginning
    // and put characters in result from end
    int j = n - 1;
    for (int i = 0; i < str.length(); i++) {
        // Ignore spaces in input string
        if (str[i] != ' ') {
            // ignore spaces in result.
            while(result[j] == ' ')
                j--;
 
            result[j] = str[i];
            j--;
        }
    }
 
    return result;
}
 
// Driver code
int main()
{
    string str = "internship at geeks for geeks";
    cout << reverses(str) << endl;
    return 0;
}


Java
// Java program to reverse a string
// preserving spaces.
public class ReverseStringPreserveSpace {
    // Function to reverse the string
    // and preserve the space position
    static void reverses(String str)
    {
 
        char[] inputArray = str.toCharArray();
        char[] result = new char[inputArray.length];
 
        // Mark spaces in result
        for (int i = 0; i < inputArray.length; i++) {
            if (inputArray[i] == ' ') {
                result[i] = ' ';
            }
        }
 
        // Traverse input string from beginning
        // and put characters in result from end
        int j = result.length - 1;
        for (int i = 0; i < inputArray.length; i++) {
 
            // Ignore spaces in input string
            if (inputArray[i] != ' ') {
 
                // ignore spaces in result.
                if (result[j] == ' ') {
                    j--;
                }
                result[j] = inputArray[i];
                j--;
            }
        }
        System.out.println(String.valueOf(result));
    }
 
    // driver function
    public static void main(String[] args)
    {
        reverses("internship at geeks for geeks");
    }
}
 
// This code is contributed by Rishabh Jain


Python3
# Python3 program to reverse a string preserving
# spaces.
 
# Function to reverse the string
# and preserve the space position
def reverses(st):
 
    # Mark spaces in result
    n = len(st)
    result = [0] * n
     
    for i in range(n):
        if (st[i] == ' '):
            result[i] = ' '
 
    # Traverse input string from beginning
    # and put characters in result from end
    j = n - 1
    for i in range(len(st)):
         
        # Ignore spaces in input string
        if (st[i] != ' '):
             
            # Ignore spaces in result.
            if (result[j] == ' '):
                j -= 1
 
            result[j] = st[i]
            j -= 1
             
    return ''.join(result)
 
# Driver code
if __name__ == "__main__":
 
    st = "internship at geeks for geeks"
    print(reverses(st))
 
# This code is contributed by ukasp


C#
// C# program to reverse a
// string preserving spaces.
using System;
 
class GFG {
 
    // Function to reverse the string
    // and preserve the space position
    static void reverses(string str)
    {
        char[] inputArray = str.ToCharArray();
        char[] result = new char[inputArray.Length];
 
        // Mark spaces in result
        for (int i = 0; i < inputArray.Length; i++) {
            if (inputArray[i] == ' ') {
                result[i] = ' ';
            }
        }
 
        // Traverse input string from beginning
        // and put characters in result from end
        int j = result.Length - 1;
        for (int i = 0; i < inputArray.Length; i++) {
 
            // Ignore spaces in input string
            if (inputArray[i] != ' ') {
 
                // ignore spaces in result.
                if (result[j] == ' ') {
                    j--;
                }
                result[j] = inputArray[i];
                j--;
            }
        }
        for (int i = 0; i < result.Length; i++)
            Console.Write(result[i]);
    }
 
    // Driver code
    public static void Main()
    {
        reverses("internship at geeks for geeks");
    }
}
 
// This code is contributed by Sam007


Javascript


C++
// C++ program to implement
// the above approach
#include 
using namespace std;
 
void preserveSpace(string &str)
{
    int n = str.length();
 
    // Initialize two pointers as two corners
    int start = 0;
    int end = n - 1;
 
    // Move both pointers toward each other
    while (start < end) {
 
        // If character at start or end is space,
        // ignore it
        if (str[start] == ' ') {
            start++;
            continue;
        }
        else if (str[end] == ' ') {
            end--;
            continue;
        }
 
        // If both are not spaces, do swap
        else {
            swap(str[start], str[end]);
            start++;
            end--;
        }
    }
}
 
// Driver code
int main()
{
    string str = "internship at geeks for geeks";
    preserveSpace(str);
    cout << str;
    return 0;
}


Java
// Java program to implement
// the above approach
import java.io.*;
import java.util.*;
 
class GFG{
     
public static void preserveSpace(String str)
{
    int n = str.length();
  
    // Initialize two pointers as two corners
    int start = 0;
    int end = n - 1;
     
    char[] Str = str.toCharArray();
     
    // Move both pointers toward each other
    while (start < end)
    {
         
        // If character at start or end
        // is space, ignore it
        if (Str[start] == ' ')
        {
            start++;
            continue;
        }
        else if (Str[end] == ' ')
        {
            end--;
            continue;
        }
  
        // If both are not spaces, do swap
        else
        {
            char temp = Str[start];
            Str[start] = Str[end];
            Str[end] = temp;
            start++;
            end--;
        }
    }
    System.out.println(String.valueOf(Str));
}
 
// Driver Code
public static void main(String[] args)
{
    String str = "internship at geeks for geeks";
     
    preserveSpace(str);
}
}
 
// This code is contributed by divyeshrabadiya07


Python3
# Python3 program to implement
# the above approach
def preserveSpace(Str):
   
    n = len(Str)
    Str = list(Str)
 
    # Initialize two pointers
    # as two corners
    start = 0
    end = n - 1
 
    # Move both pointers
    # toward each other
    while(start < end):
 
        # If character at start
        # or end is space,
        # ignore it
        if(Str[start] == ' '):
            start += 1
            continue
        elif(Str[end] == ' '):
            end -= 1
            continue
             
        # If both are not
        # spaces, do swap
        else:
            Str[start], Str[end] = (Str[end],
                                    Str[start])
            start += 1
            end -= 1
    print(''.join(Str))
 
# Driver code
Str = "internship at geeks for geeks"
preserveSpace(Str);
 
# This code is contributed by avanitrachhadiya2155


C#
// C# program to implement
// the above approach
using System;
using System.Collections.Generic;
 
class GFG{
     
static void preserveSpace(string str)
{
    int n = str.Length;
     
    // Initialize two pointers
    // as two corners
    int start = 0;
    int end = n - 1;
      
    char[] Str = str.ToCharArray();
      
    // Move both pointers toward
    // each other
    while (start < end)
    {
         
        // If character at start or
        // end is space, ignore it
        if (Str[start] == ' ')
        {
            start++;
            continue;
        }
        else if (Str[end] == ' ')
        {
            end--;
            continue;
        }
   
        // If both are not spaces, do swap
        else
        {
            char temp = Str[start];
            Str[start] = Str[end];
            Str[end] = temp;
            start++;
            end--;
        }
    }
    Console.Write(new string(Str));
}
 
// Driver code   
static void Main()
{
    string str = "internship at geeks for geeks";
  
    preserveSpace(str);
}
}
 
// This code is contributed by divyesh072019


Javascript


输出:
skeegrofsk ee gtapi hsn retni

时间复杂度 -> O(N)
辅助空间 -> O(N)

优化方案
这个想法是使用两个指针来反转。

C++

// C++ program to implement
// the above approach
#include 
using namespace std;
 
void preserveSpace(string &str)
{
    int n = str.length();
 
    // Initialize two pointers as two corners
    int start = 0;
    int end = n - 1;
 
    // Move both pointers toward each other
    while (start < end) {
 
        // If character at start or end is space,
        // ignore it
        if (str[start] == ' ') {
            start++;
            continue;
        }
        else if (str[end] == ' ') {
            end--;
            continue;
        }
 
        // If both are not spaces, do swap
        else {
            swap(str[start], str[end]);
            start++;
            end--;
        }
    }
}
 
// Driver code
int main()
{
    string str = "internship at geeks for geeks";
    preserveSpace(str);
    cout << str;
    return 0;
}

Java

// Java program to implement
// the above approach
import java.io.*;
import java.util.*;
 
class GFG{
     
public static void preserveSpace(String str)
{
    int n = str.length();
  
    // Initialize two pointers as two corners
    int start = 0;
    int end = n - 1;
     
    char[] Str = str.toCharArray();
     
    // Move both pointers toward each other
    while (start < end)
    {
         
        // If character at start or end
        // is space, ignore it
        if (Str[start] == ' ')
        {
            start++;
            continue;
        }
        else if (Str[end] == ' ')
        {
            end--;
            continue;
        }
  
        // If both are not spaces, do swap
        else
        {
            char temp = Str[start];
            Str[start] = Str[end];
            Str[end] = temp;
            start++;
            end--;
        }
    }
    System.out.println(String.valueOf(Str));
}
 
// Driver Code
public static void main(String[] args)
{
    String str = "internship at geeks for geeks";
     
    preserveSpace(str);
}
}
 
// This code is contributed by divyeshrabadiya07

Python3

# Python3 program to implement
# the above approach
def preserveSpace(Str):
   
    n = len(Str)
    Str = list(Str)
 
    # Initialize two pointers
    # as two corners
    start = 0
    end = n - 1
 
    # Move both pointers
    # toward each other
    while(start < end):
 
        # If character at start
        # or end is space,
        # ignore it
        if(Str[start] == ' '):
            start += 1
            continue
        elif(Str[end] == ' '):
            end -= 1
            continue
             
        # If both are not
        # spaces, do swap
        else:
            Str[start], Str[end] = (Str[end],
                                    Str[start])
            start += 1
            end -= 1
    print(''.join(Str))
 
# Driver code
Str = "internship at geeks for geeks"
preserveSpace(Str);
 
# This code is contributed by avanitrachhadiya2155

C#

// C# program to implement
// the above approach
using System;
using System.Collections.Generic;
 
class GFG{
     
static void preserveSpace(string str)
{
    int n = str.Length;
     
    // Initialize two pointers
    // as two corners
    int start = 0;
    int end = n - 1;
      
    char[] Str = str.ToCharArray();
      
    // Move both pointers toward
    // each other
    while (start < end)
    {
         
        // If character at start or
        // end is space, ignore it
        if (Str[start] == ' ')
        {
            start++;
            continue;
        }
        else if (Str[end] == ' ')
        {
            end--;
            continue;
        }
   
        // If both are not spaces, do swap
        else
        {
            char temp = Str[start];
            Str[start] = Str[end];
            Str[end] = temp;
            start++;
            end--;
        }
    }
    Console.Write(new string(Str));
}
 
// Driver code   
static void Main()
{
    string str = "internship at geeks for geeks";
  
    preserveSpace(str);
}
}
 
// This code is contributed by divyesh072019

Javascript


输出:
skeegrofsk ee gtapi hsn retni