给定字符串s ,我们的任务是使用递归将所有出现的字母x移动到字符串s的末尾。
注意:如果给定的字符串中只有字母x,则返回原样的字符串。
例子:
Input: s= “geekxsforgexxeksxx”
Output: geeksforgeeksxxxxx
Explanation:
All occurrence of letter ‘x’ is moved to the end.
Input: s = “xxxxx”
Output: xxxxx
Explanation:
Since there are only letter x in the given string therefore the output is unaltered.
方法:
为了解决上述问题,我们可以使用递归。遍历字符串,并递归检查当前字符是否等于字符“ x”。如果不是,则打印该字符,否则移至下一个字符,直到达到字符串s的长度。
下面是上述方法的实现:
C++
// C++ implementation to Move all occurence of letter ‘x’
// from the string s to the end using Recursion
#include
using namespace std;
// Function to move all 'x' in the end
void moveAtEnd(string s, int i, int l)
{
if (i >= l)
return;
// Store current character
char curr = s[i];
// Check if current character is not 'x'
if (curr != 'x')
cout << curr;
// recursive function call
moveAtEnd(s, i + 1, l);
// Check if current character is 'x'
if (curr == 'x')
cout << curr;
return;
}
// Driver code
int main()
{
string s = "geekxsforgexxeksxx";
int l = s.length();
moveAtEnd(s, 0, l);
return 0;
}
Java
// Java implementation to Move all occurence of letter ‘x’
// from the string s to the end using Recursion
import java.util.*;
class GFG{
// Function to move all 'x' in the end
static void moveAtEnd(String s, int i, int l)
{
if (i >= l)
return;
// Store current character
char curr = s.charAt(i);
// Check if current character is not 'x'
if (curr != 'x')
System.out.print(curr);
// recursive function call
moveAtEnd(s, i + 1, l);
// Check if current character is 'x'
if (curr == 'x')
System.out.print(curr);
return;
}
// Driver code
public static void main(String args[])
{
String s = "geekxsforgexxeksxx";
int l = s.length();
moveAtEnd(s, 0, l);
}
}
// This code is contributed by Code_Mech
Python3
# Python3 implementation to move all
# occurrences of letter ‘x’ from the
# string s to the end using recursion
# Function to move all 'x' in the end
def moveAtEnd(s, i, l):
if(i >= l):
return
# Store current character
curr = s[i]
# Check if current character
# is not 'x'
if(curr != 'x'):
print(curr, end = "")
# Recursive function call
moveAtEnd(s, i + 1, l)
# Check if current character is 'x'
if(curr == 'x'):
print(curr, end = "")
return
# Driver code
if __name__ == '__main__':
s = "geekxsforgexxeksxx"
l = len(s)
moveAtEnd(s, 0, l)
# This code is contributed by Shivam Singh
C#
// C# implementation to Move all occurence of letter ‘x’
// from the string s to the end using Recursion
using System;
class GFG{
// Function to move all 'x' in the end
static void moveAtEnd(string s, int i, int l)
{
if (i >= l)
return;
// Store current character
char curr = s[i];
// Check if current character is not 'x'
if (curr != 'x')
Console.Write(curr);
// recursive function call
moveAtEnd(s, i + 1, l);
// Check if current character is 'x'
if (curr == 'x')
Console.Write(curr);
return;
}
// Driver code
public static void Main()
{
string s = "geekxsforgexxeksxx";
int l = s.Length;
moveAtEnd(s, 0, l);
}
}
// This code is contributed by Nidhi_Biet
Javascript
C++
// C++ program for above approach
#include
using namespace std;
// Recursive program to bring 'x'
// to the end
void rec(char *a, int i)
{
// When the string is completed
// from reverse direction end of recursion
if(i == 0)
{
cout << a << endl;
return;
}
// If the character x is found
if(a[i] == 'x')
{
// Transverse the whole string
int j = i;
while(a[j] != '\0' && a[j+1] != '\0')
{
// Swap the x so that
// it moves to the last
swap(a[j], a[j+1]);
j++;
}
}
// call to the smaller problem now
rec(a, i - 1);
}
// Driver Code
int main()
{
char a[] = {'g', 'e', 'e', 'k', 'x',
's', 'x', 'x', 'k', 's', '\0'};
// Size of a
int n = 10;
// Call to rec
rec(a,n-1);
}
/* This code is contributed by Harsh kedia */
Java
// Java program for the
// above approach
import java.util.*;
class Main{
// Recursive program to
// bring 'x' to the end
public static void rec(char a[],
int i)
{
// When the string is completed
// from reverse direction end
// of recursion
if(i == 0)
{
System.out.println(a);
return;
}
// If the character x is found
if(a[i] == 'x')
{
// Transverse the whole string
int j = i;
while(a[j] != '\0' &&
a[j + 1] != '\0')
{
// Swap the x so that
// it moves to the last
char temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
j++;
}
}
// call to the smaller
// problem now
rec(a, i - 1);
}
// Driver code
public static void main(String[] args)
{
char a[] = {'g', 'e', 'e', 'k',
'x', 's', 'x', 'x',
'k', 's', '\0'};
// Size of a
int n = 10;
// Call to rec
rec(a,n-1);
}
}
// This code is contributed by divyeshrabadiya07
Python3
# Python3 program for above approach
# Recursive program to bring 'x'
# to the end
def rec(a, i):
# When the string is completed
# from reverse direction end
# of recursion
if (i == 0):
a.pop()
print("".join(a))
return
# If the character x is found
if (a[i] == 'x'):
# Transverse the whole string
j = i
while(a[j] != '\0' and
a[j + 1] != '\0'):
# Swap the x so that
# it moves to the last
(a[j], a[j + 1]) = (a[j + 1], a[j])
j += 1
# Call to the smaller problem now
rec(a, i - 1)
# Driver code
if __name__=="__main__":
a = [ 'g', 'e', 'e', 'k', 'x',
's', 'x', 'x', 'k', 's', '\0' ]
# Size of a
n = 10
# Call to rec
rec(a, n - 1)
# This code is contributed by rutvik_56
C#
// C# program for the
// above approach
using System;
class GFG
{
// Recursive program to
// bring 'x' to the end
static void rec(char[] a, int i)
{
// When the string is completed
// from reverse direction end
// of recursion
if(i == 0)
{
Console.WriteLine(a);
return;
}
// If the character x is found
if(a[i] == 'x')
{
// Transverse the whole string
int j = i;
while(a[j] != '\0' &&
a[j + 1] != '\0')
{
// Swap the x so that
// it moves to the last
char temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
j++;
}
}
// call to the smaller
// problem now
rec(a, i - 1);
}
// Driver code
static void Main()
{
char[] a = {'g', 'e', 'e', 'k',
'x', 's', 'x', 'x',
'k', 's', '\0'};
// Size of a
int n = 10;
// Call to rec
rec(a,n-1);
}
}
// This code is contributed by divyesh072019
输出
geeksforgeeksxxxxx
另一个涉及字符交换的实现:
在这种方法中,我们将交换相邻字符以在末尾加上“ x”。
下面是上述技术的实现:
C++
// C++ program for above approach
#include
using namespace std;
// Recursive program to bring 'x'
// to the end
void rec(char *a, int i)
{
// When the string is completed
// from reverse direction end of recursion
if(i == 0)
{
cout << a << endl;
return;
}
// If the character x is found
if(a[i] == 'x')
{
// Transverse the whole string
int j = i;
while(a[j] != '\0' && a[j+1] != '\0')
{
// Swap the x so that
// it moves to the last
swap(a[j], a[j+1]);
j++;
}
}
// call to the smaller problem now
rec(a, i - 1);
}
// Driver Code
int main()
{
char a[] = {'g', 'e', 'e', 'k', 'x',
's', 'x', 'x', 'k', 's', '\0'};
// Size of a
int n = 10;
// Call to rec
rec(a,n-1);
}
/* This code is contributed by Harsh kedia */
Java
// Java program for the
// above approach
import java.util.*;
class Main{
// Recursive program to
// bring 'x' to the end
public static void rec(char a[],
int i)
{
// When the string is completed
// from reverse direction end
// of recursion
if(i == 0)
{
System.out.println(a);
return;
}
// If the character x is found
if(a[i] == 'x')
{
// Transverse the whole string
int j = i;
while(a[j] != '\0' &&
a[j + 1] != '\0')
{
// Swap the x so that
// it moves to the last
char temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
j++;
}
}
// call to the smaller
// problem now
rec(a, i - 1);
}
// Driver code
public static void main(String[] args)
{
char a[] = {'g', 'e', 'e', 'k',
'x', 's', 'x', 'x',
'k', 's', '\0'};
// Size of a
int n = 10;
// Call to rec
rec(a,n-1);
}
}
// This code is contributed by divyeshrabadiya07
Python3
# Python3 program for above approach
# Recursive program to bring 'x'
# to the end
def rec(a, i):
# When the string is completed
# from reverse direction end
# of recursion
if (i == 0):
a.pop()
print("".join(a))
return
# If the character x is found
if (a[i] == 'x'):
# Transverse the whole string
j = i
while(a[j] != '\0' and
a[j + 1] != '\0'):
# Swap the x so that
# it moves to the last
(a[j], a[j + 1]) = (a[j + 1], a[j])
j += 1
# Call to the smaller problem now
rec(a, i - 1)
# Driver code
if __name__=="__main__":
a = [ 'g', 'e', 'e', 'k', 'x',
's', 'x', 'x', 'k', 's', '\0' ]
# Size of a
n = 10
# Call to rec
rec(a, n - 1)
# This code is contributed by rutvik_56
C#
// C# program for the
// above approach
using System;
class GFG
{
// Recursive program to
// bring 'x' to the end
static void rec(char[] a, int i)
{
// When the string is completed
// from reverse direction end
// of recursion
if(i == 0)
{
Console.WriteLine(a);
return;
}
// If the character x is found
if(a[i] == 'x')
{
// Transverse the whole string
int j = i;
while(a[j] != '\0' &&
a[j + 1] != '\0')
{
// Swap the x so that
// it moves to the last
char temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
j++;
}
}
// call to the smaller
// problem now
rec(a, i - 1);
}
// Driver code
static void Main()
{
char[] a = {'g', 'e', 'e', 'k',
'x', 's', 'x', 'x',
'k', 's', '\0'};
// Size of a
int n = 10;
// Call to rec
rec(a,n-1);
}
}
// This code is contributed by divyesh072019
输出
geeksksxxx