给定字符串小写字母。找出要在字符串插入的最少字符,使其成为回文。我们可以改变字符串中字符的位置。
例子:
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 现场工作专业课程和学生竞争性编程现场课程。