📌  相关文章
📜  通过从给定字符串的前 K 个字符中附加一个字符而形成的字典上最小的字符串

📅  最后修改于: 2022-05-13 01:57:07.315000             🧑  作者: Mango

通过从给定字符串的前 K 个字符中附加一个字符而形成的字典上最小的字符串

给定一个由小写字母组成的字符串S。任务是找到相同长度的字典上最小的字符串X,它只能使用下面给出的操作形成:
在单个操作中,从字符串S 的前 K 个字符中选择任意一个字符,将其从字符串S 中删除并附加到字符串X 中。此操作可以应用多次。
例子:

方法:

  • 在字符串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