给定字符串S和字符C ,任务是将字符放置在字符串中,使得获得的字符串是词典上最小的字符串。
例子:
Input: S = “acd”, C = ‘b’
Output: “abcd”
Explanation: The possible strings formed by placing the character C in string at different indices are [“bacd”, “abcd”, “acbd”, “acdb”]
The lexicographically smallest string obtained is “abcd”.
Input: S = “abcd”, C=’e’
Output: “abcde”
Explanation: The possible strings formed by placing the character C in string at different indices are {“eabcd”, “aebcd”, “abecd”, “abced”, “abcde”}.
The lexicographically smallest string is “abcde”.
方法:想法是将字符放在字典上比字符串的字符C大的第一个字符之前。如果在字符串中未找到任何字符是大于C,在结尾处的字符。
下面是上述方法的实现:
C++
// C++ Program to implement the
// above approach
#include
using namespace std;
// Function to obtain lexicographically
// smallest string possible by inserting
// character c in the string s
string SmallestString(string s, char c)
{
// Traverse the string
for (int i = 0; i < s.size(); i++) {
// If the current character is greater
// than the given character
if (s[i] > c) {
// Insert the character before
// the greater character
s.insert(i, 1, c);
// Return the string
return s;
}
}
// Append the character at the end
s += c;
// Return the string
return s;
}
// Driver Code
int main()
{
string S = "acd";
char C = 'b';
cout << SmallestString(S, C) << endl;
return 0;
}
Java
// Java program to implement the
// above approach
import java.util.*;
class GFG{
// Function to obtain lexicographically
// smallest String possible by inserting
// character c in the String s
static String SmallestString(String s, char c)
{
// Traverse the String
for(int i = 0; i < s.length(); i++)
{
// If the current character is greater
// than the given character
if (s.charAt(i) > c)
{
// Insert the character before
// the greater character
String temp = s;
s = s.substring(0, i);
s += c;
s += temp.substring(i, temp.length());
// Return the String
return s;
}
}
// Append the character at the end
s += c;
// Return the String
return s;
}
// Driver Code
public static void main(String args[])
{
String S = "acd";
char C = 'b';
System.out.println(SmallestString(S, C));
}
}
// This code is contributed by ipg2016107
Python3
# Python3 Program to implement
# the above approach
# Function to obtain lexicographically
# smallest string possible by inserting
# character c in the string s
def SmallestString(s, c):
i = 0
# Traverse the string
while(i < len(s)):
# Check if current character is
# greater than the given character
if s[i] > c:
# Insert the character before
# the first greater character
s = s[:i] + c + s[i:]
# Return the string
return s
i = i + 1
# Append the character at the end
s = s + c
# Return the string
return s
S = 'abd'
C = 'c'
# Function call
print(SmallestString(S, C))
C#
// C# program to implement the
// above approach
using System;
class GFG{
// Function to obtain lexicographically
// smallest String possible by inserting
// character c in the String s
static String SmallestString(String s, char c)
{
// Traverse the String
for(int i = 0; i < s.Length; i++)
{
// If the current character is greater
// than the given character
if (s[i] > c)
{
// Insert the character before
// the greater character
String temp = s;
s = s.Substring(0, i);
s += c;
s += temp.Substring(i, temp.Length - 1);
// Return the String
return s;
}
}
// Append the character at the end
s += c;
// Return the String
return s;
}
// Driver Code
public static void Main(String []args)
{
String S = "acd";
char C = 'b';
Console.WriteLine(SmallestString(S, C));
}
}
// This code is contributed by aashish1995
输出:
abcd
时间复杂度: O(len(str))
辅助空间: O(1)