通过从给定字符串的前 K 个字符中附加一个字符而形成的字典上最小的字符串
给定一个由小写字母组成的字符串S。任务是找到相同长度的字典上最小的字符串X,它只能使用下面给出的操作形成:
在单个操作中,从字符串S 的前 K 个字符中选择任意一个字符,将其从字符串S 中删除并附加到字符串X 中。此操作可以应用多次。
例子:
Input: str = “gaurang”, k=3
Output: agangru
Remove ‘a’ in the first step and append to X.
Remove ‘g’ in the second step and append to X.
Remove ‘a’ in the third step and append to X.
Remove ‘n’ in the third step and append to X.
Pick the lexicographically smallest character at every step from the first K characters to get the
string “agangru”
Input: str = “geeksforgeeks”, k=5
Output: eefggeekkorss
方法:
- 在字符串S 的前 k 个字符中找到最小的字符。
- 删除从字符串中找到的最小字符。
- 将找到的最小字符附加到新字符串X。
- 重复上述步骤,直到字符串s 为空。
下面是上述方法的实现:
C++
// C++ program to find the new string
// after performing deletions and append
// operation in the string s
#include
using namespace std;
// Function to find the new string thus
// formed by removing characters
string newString(string s, int k)
{
// new string
string X = "";
// Remove characters until
// the string is empty
while (s.length() > 0) {
char temp = s[0];
// Traverse to find the smallest character in the
// first k characters
for (long long i = 1; i < k and i < s.length(); i++) {
if (s[i] < temp) {
temp = s[i];
}
}
// append the smallest character
X = X + temp;
// removing the lexicographically smallest
// character from the string
for (long long i = 0; i < k; i++) {
if (s[i] == temp) {
s.erase(s.begin() + i);
break;
}
}
}
return X;
}
// Driver Code
int main()
{
string s = "gaurang";
int k = 3;
cout << newString(s, k);
}
Java
// Java program to find the new string
// after performing deletions and append
// operation in the string s
class GFG {
// Function to find the new string thus
// formed by removing characters
static String newString(String s, int k) {
// new string
String X = "";
// Remove characters until
// the string is empty
while (s.length() > 0) {
char temp = s.charAt(0);
// Traverse to find the smallest character in the
// first k characters
for (int i = 1; i < k && i < s.length(); i++) {
if (s.charAt(i) < temp) {
temp = s.charAt(i);
}
}
// append the smallest character
X = X + temp;
// removing the lexicographically smallest
// character from the string
for (int i = 0; i < k; i++) {
if (s.charAt(i) == temp) {
s = s.substring(0, i) + s.substring(i + 1);
//s.erase(s.begin() + i);
break;
}
}
}
return X;
}
// Driver code
public static void main(String[] args) {
String s = "gaurang";
int k = 3;
System.out.println(newString(s, k));
}
}
// This code contributed by Jajput-Ji
Python3
# Python 3 program to find the new string
# after performing deletions and append
# operation in the string s
# Function to find the new string thus
# formed by removing characters
def newString(s, k):
# new string
X = ""
# Remove characters until
# the string is empty
while (len(s) > 0):
temp = s[0]
# Traverse to find the smallest
# character in the first k characters
i = 1
while(i < k and i < len(s)):
if (s[i] < temp):
temp = s[i]
i += 1
# append the smallest character
X = X + temp
# removing the lexicographically
# smallest character from the string
for i in range(k):
if (s[i] == temp):
s = s[0:i] + s[i + 1:]
break
return X
# Driver Code
if __name__ == '__main__':
s = "gaurang"
k = 3
print(newString(s, k))
# This code is contributed by
# Shashank_Sharma
C#
// C# program to find the new string
// after performing deletions and
// append operation in the string s
using System;
class GFG
{
// Function to find the new string thus
// formed by removing characters
static String newString(String s, int k)
{
// new string
String X = "";
// Remove characters until
// the string is empty
while (s.Length > 0)
{
char temp = s[0];
// Traverse to find the smallest
// character in the first k characters
for (int i = 1; i < k && i < s.Length; i++)
{
if (s[i] < temp)
{
temp = s[i];
}
}
// append the smallest character
X = X + temp;
// removing the lexicographically smallest
// character from the string
for (int i = 0; i < k; i++)
{
if (s[i] == temp)
{
s = s.Substring(0, i) + s.Substring(i + 1);
//s.erase(s.begin() + i);
break;
}
}
}
return X;
}
// Driver code
public static void Main(String[] args)
{
String s = "gaurang";
int k = 3;
Console.Write(newString(s, k));
}
}
// This code contributed by Rajput-Ji
PHP
0)
{
$temp = $s[0];
// Traverse to find the smallest
// character in the first k characters
for ($i = 1; $i < $k &&
$i < strlen($s); $i++)
{
if ($s[$i] < $temp)
{
$temp = $s[$i];
}
}
// append the smallest character
$X = $X . $temp;
// removing the lexicographically smallest
// character from the string
for ($i = 0; $i < $k; $i++)
{
if ($s[$i] == $temp)
{
$s = substr($s, 0, $i) .
substr($s, $i + 1, strlen($s));
//s.erase(s.begin() + i);
break;
}
}
}
return $X;
}
// Driver code
$s = "gaurang";
$k = 3;
echo(newString($s, $k));
// This code contributed by mits
?>
Javascript
输出:
agangru