反转字符串保留空间位置
编写一个程序来反转给定的字符串,同时保留空格的位置。
例子:
Input : "abc de"
Output : edc ba
Input : "intern at geeks"
Output : skeegt an retni
Input : "Help others"
Output : sreh topleH
- 创建一个字符串来存储结果。标记给定字符串在此字符串中的空格位置。
- 将输入字符串中的字符以相反的顺序插入到结果字符串中。
- 插入字符时,检查结果字符串是否在索引“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