📌  相关文章
📜  形成回文的最少插入次数,允许排列

📅  最后修改于: 2021-10-27 07:34:41             🧑  作者: Mango

给定字符串小写字母。找出要在字符串插入的最少字符,使其成为回文。我们可以改变字符串中字符的位置。
例子:

Input : geeksforgeeks
Output : 2
geeksforgeeks can be changed as:
geeksroforskeeg
geeksorfroskeeg
and many more

Input : aabbc
Output : 0
aabbc can be changed as:
abcba
bacab

只有当字符串的长度为奇数时,回文字符串才能有一个奇数字符,否则所有字符出现偶数次。所以,我们必须找到发生在字符串中的奇次字符。
这个想法是计算字符串中每个字符的出现次数。由于回文字符串可以有一个字符出现奇数次,所以插入的次数会比出现奇数次的字符数少一。如果字符串已经是回文,我们不需要添加任何字符,所以结果将为0。

C++
// CPP program to find minimum number
// of insertions to make a string
// palindrome
#include 
using namespace std;
 
// Function will return number of
// characters to be added
int minInsertion(string str)
{
    // To store string length
    int n = str.length();
 
    // To store number of characters
    // occurring odd number of times
    int res = 0;
 
    // To store count of each
    // character
    int count[26] = { 0 };
 
    // To store occurrence of each
    // character
    for (int i = 0; i < n; i++)
        count[str[i] - 'a']++;
 
    // To count characters with odd
    // occurrence
    for (int i = 0; i < 26; i++)
        if (count[i] % 2 == 1)
            res++;
 
    // As one character can be odd return
    // res - 1 but if string is already
    // palindrome return 0
    return (res == 0) ? 0 : res - 1;
}
 
// Driver program
int main()
{
    string str = "geeksforgeeks";
    cout << minInsertion(str);
 
    return 0;
}


Java
// Java program to find minimum number
// of insertions to make a string
// palindrome
public class Palindrome {
 
    // Function will return number of
    // characters to be added
    static int minInsertion(String str)
    {
        // To store string length
        int n = str.length();
 
        // To store number of characters
        // occurring odd number of times
        int res = 0;
 
        // To store count of each
        // character
        int[] count = new int[26];
 
        // To store occurrence of each
        // character
        for (int i = 0; i < n; i++)
            count[str.charAt(i) - 'a']++;
 
        // To count characters with odd
        // occurrence
        for (int i = 0; i < 26; i++) {
            if (count[i] % 2 == 1)
                res++;
        }
 
        // As one character can be odd return
        // res - 1 but if string is already
        // palindrome return 0
        return (res == 0) ? 0 : res - 1;
    }
 
    // Driver program
    public static void main(String[] args)
    {
        String str = "geeksforgeeks";
        System.out.println(minInsertion(str));
    }
}


Python3
# Python3 program to find minimum number
# of insertions to make a string
# palindrome
import math as mt
 
# Function will return number of
# characters to be added
def minInsertion(tr1):
 
    # To store str1ing length
    n = len(str1)
 
    # To store number of characters
    # occurring odd number of times
    res = 0
 
    # To store count of each
    # character
    count = [0 for i in range(26)]
 
    # To store occurrence of each
    # character
    for i in range(n):
        count[ord(str1[i]) - ord('a')] += 1
 
    # To count characters with odd
    # occurrence
    for i in range(26):
        if (count[i] % 2 == 1):
            res += 1
 
    # As one character can be odd return
    # res - 1 but if str1ing is already
    # palindrome return 0
    if (res == 0):
        return 0
    else:
        return res - 1
 
# Driver Code
str1 = "geeksforgeeks"
print(minInsertion(str1))
 
# This code is contributed by
# Mohit kumar 29


C#
// C# program to find minimum number
// of insertions to make a string
// palindrome
using System;
 
public class GFG {
 
    // Function will return number of
    // characters to be added
    static int minInsertion(String str)
    {
         
        // To store string length
        int n = str.Length;
 
        // To store number of characters
        // occurring odd number of times
        int res = 0;
 
        // To store count of each
        // character
        int[] count = new int[26];
 
        // To store occurrence of each
        // character
        for (int i = 0; i < n; i++)
            count[str[i] - 'a']++;
 
        // To count characters with odd
        // occurrence
        for (int i = 0; i < 26; i++) {
            if (count[i] % 2 == 1)
                res++;
        }
 
        // As one character can be odd
        // return res - 1 but if string
        // is already palindrome
        // return 0
        return (res == 0) ? 0 : res - 1;
    }
 
    // Driver program
    public static void Main()
    {
        string str = "geeksforgeeks";
         
        Console.WriteLine(minInsertion(str));
    }
}
 
// This code is contributed by vt_m.


PHP


Javascript


输出:

2

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程