在单次遍历中将空格移动到字符串的前面
给定一个包含单词和空格的字符串,编写一个程序将所有空格移动到字符串的前面,只遍历字符串一次。
例子:
Input : str = "geeks for geeks"
Output : ste = " geeksforgeeks"
Input : str = "move these spaces to beginning"
Output : str = " movethesespacestobeginning"
There were four space characters in input,
all of them should be shifted in front.
方法 1(使用交换)
想法是维护两个索引 i 和 j。从头到尾遍历。如果当前索引包含空格,则将索引 i 中的字符与索引 j 交换。这会将所有空格带到数组的开头。
C++
// C++ program to bring all spaces in front of
// string using swapping technique
#include
using namespace std;
// Function to find spaces and move to beginning
void moveSpaceInFront(char str[])
{
// Traverse from end and swap spaces
int i = strlen(str)-1;
for (int j = i; j >= 0; j--)
if (str[j] != ' ')
swap(str[i--], str[j]);
}
// Driver code
int main()
{
char str[] = "Hey there, it's GeeksforGeeks";
moveSpaceInFront(str);
cout << str;
return 0;
}
Java
// Java program to bring all spaces in front of
// string using swapping technique
class GFG
{
// Function to find spaces and move to beginning
static void moveSpaceInFront(char str[])
{
// Traverse from end and swap spaces
int i = str.length-1;
for (int j = i; j >= 0; j--)
if (str[j] != ' ')
{
char c = str[i];
str[i] = str[j];
str[j] = c;
i--;
}
}
// Driver code
public static void main(String[] args)
{
char str[] = "Hey there, it's GeeksforGeeks".toCharArray();
moveSpaceInFront(str);
System.out.println(String.valueOf(str));
}
}
// This code is contributed by
// 29AjayKumar
Python3
# Python3 program to bring all spaces
# in front of string using swapping technique
# Function to find spaces and move to beginning
def moveSpaceInFront(s):
# Traverse from end and swap spaces
i = len(s) - 1;
for j in range(i, -1, -1):
if (s[j] != ' '):
s = swap(s, i, j);
i -= 1;
return s;
def swap(c, i, j):
c = list(c)
c[i], c[j] = c[j], c[i]
return ''.join(c)
# Driver code
s = "Hey there, it's GeeksforGeeks";
s = moveSpaceInFront(s);
print(s);
# This code is contributed
# by Princi Singh
C#
// C# program to bring all spaces in front of
// string using swapping technique
using System;
class GFG
{
// Function to find spaces and move to beginning
static void moveSpaceInFront(char []str)
{
// Traverse from end and swap spaces
int i = str.Length-1;
for (int j = i; j >= 0; j--)
if (str[j] != ' ')
{
char c = str[i];
str[i] = str[j];
str[j] = c;
i--;
}
}
// Driver code
public static void Main()
{
char []str = "Hey there, it's GeeksforGeeks".ToCharArray();
moveSpaceInFront(str);
Console.WriteLine(String.Join("",str));
}
}
// This code is contributed by PrinciRaj1992
Javascript
C++
// CPP program to bring all spaces in front of
// string using swapping technique
#include
using namespace std;
// Function to find spaces and move to beginning
void moveSpaceInFront(char str[])
{
// Keep copying non-space characters
int i = strlen(str);
for (int j=i; j >= 0; j--)
if (str[j] != ' ')
str[i--] = str[j];
// Move spaces to be beginning
while (i >= 0)
str[i--] = ' ';
}
// Driver code
int main()
{
char str[] = "Hey there, it's GeeksforGeeks";
moveSpaceInFront(str);
cout << str;
return 0;
}
Java
// Java program to bring all spaces in front of
// string using swapping technique
class GFG
{
// Function to find spaces and move to beginning
static void moveSpaceInFront(char str[])
{
// Keep copying non-space characters
int i = str.length-1;
for (int j = i; j >= 0; j--)
if (str[j] != ' ')
str[i--] = str[j];
// Move spaces to be beginning
while (i >= 0)
str[i--] = ' ';
}
// Driver code
public static void main(String[] args)
{
char str[] = "Hey there, it's GeeksforGeeks".toCharArray();
moveSpaceInFront(str);
System.out.println(String.valueOf(str));
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 program to bring all spaces
# in front of sing using swapping technique
# Function to find spaces and
# move to beginning
def moveSpaceInFront(s):
# Keep copying non-space characters
i = len(s) - 1;
for j in range(i, -1, -1):
if (s[j] != ' '):
s = s[:i] + s[j] + s[i + 1:]
i -= 1;
# Move spaces to be beginning
while (i >= 0):
s = s[:i] + ' ' + s[i + 1:]
i -= 1
return s;
# Driver code
s = "Hey there, it's GeeksforGeeks";
s = moveSpaceInFront(s);
print(s);
# This code is contributed
# by Princi Singh
C#
// C# program to bring all spaces in front of
// string using swapping technique
using System;
class GFG
{
// Function to find spaces and move to beginning
static void moveSpaceInFront(char []str)
{
// Keep copying non-space characters
int i = str.Length-1;
for (int j = i; j >= 0; j--)
if (str[j] != ' ')
str[i--] = str[j];
// Move spaces to be beginning
while (i >= 0)
str[i--] = ' ';
}
// Driver code
public static void Main(String[] args)
{
char []str = "Hey there, it's GeeksforGeeks".
ToCharArray();
moveSpaceInFront(str);
Console.WriteLine(String.Join("",str));
}
}
// This code is contributed by Rajput-Ji
Javascript
输出:
Heythere,it'sGeeksforGeeks
时间复杂度-: O(n)
辅助空间-: O(1)方法2(不使用swap)
这个想法是将所有非空格字符复制到结尾。最后复制空格。
C++
// CPP program to bring all spaces in front of
// string using swapping technique
#include
using namespace std;
// Function to find spaces and move to beginning
void moveSpaceInFront(char str[])
{
// Keep copying non-space characters
int i = strlen(str);
for (int j=i; j >= 0; j--)
if (str[j] != ' ')
str[i--] = str[j];
// Move spaces to be beginning
while (i >= 0)
str[i--] = ' ';
}
// Driver code
int main()
{
char str[] = "Hey there, it's GeeksforGeeks";
moveSpaceInFront(str);
cout << str;
return 0;
}
Java
// Java program to bring all spaces in front of
// string using swapping technique
class GFG
{
// Function to find spaces and move to beginning
static void moveSpaceInFront(char str[])
{
// Keep copying non-space characters
int i = str.length-1;
for (int j = i; j >= 0; j--)
if (str[j] != ' ')
str[i--] = str[j];
// Move spaces to be beginning
while (i >= 0)
str[i--] = ' ';
}
// Driver code
public static void main(String[] args)
{
char str[] = "Hey there, it's GeeksforGeeks".toCharArray();
moveSpaceInFront(str);
System.out.println(String.valueOf(str));
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 program to bring all spaces
# in front of sing using swapping technique
# Function to find spaces and
# move to beginning
def moveSpaceInFront(s):
# Keep copying non-space characters
i = len(s) - 1;
for j in range(i, -1, -1):
if (s[j] != ' '):
s = s[:i] + s[j] + s[i + 1:]
i -= 1;
# Move spaces to be beginning
while (i >= 0):
s = s[:i] + ' ' + s[i + 1:]
i -= 1
return s;
# Driver code
s = "Hey there, it's GeeksforGeeks";
s = moveSpaceInFront(s);
print(s);
# This code is contributed
# by Princi Singh
C#
// C# program to bring all spaces in front of
// string using swapping technique
using System;
class GFG
{
// Function to find spaces and move to beginning
static void moveSpaceInFront(char []str)
{
// Keep copying non-space characters
int i = str.Length-1;
for (int j = i; j >= 0; j--)
if (str[j] != ' ')
str[i--] = str[j];
// Move spaces to be beginning
while (i >= 0)
str[i--] = ' ';
}
// Driver code
public static void Main(String[] args)
{
char []str = "Hey there, it's GeeksforGeeks".
ToCharArray();
moveSpaceInFront(str);
Console.WriteLine(String.Join("",str));
}
}
// This code is contributed by Rajput-Ji
Javascript
输出:
Heythere,it'sGeeksforGeeks
时间复杂度-: O(n)
辅助空格-:O(1)