给定一个字符串str和一个整数K,任务是检查,如果给定的字符串的置换可以通过至多为k字符从给定字符串除去进行回文。
例子:
Input: str = “geeksforgeeks”, K = 2
Output: Yes
Explanation:
Removing (str[5], str[6]) from the given string makes the remaining string “geeksrgeeks” palindromic. Therefore, the required output is Yes.
Input: str = “coder”, K = 1
Output: No
方法:可以使用哈希解决问题。我们的想法是迭代给定的字符串的字符和存储给定的字符串的每个不同的字符的频率。如果给定字符串具有奇数频率的不重复字符计数小于或等于(K +1) ,则打印“是” 。否则,打印No。请按照以下步骤解决问题:
- 初始化一个数组,例如cntFreq [],以存储str每个字符的频率。
- 遍历给定的字符串,并将字符串str的每个不同字符的频率存储在cntFreq []数组中。
- 初始化一个变量,例如cntOddFreq,以存储给定字符串的不同字符的计数,其频率为奇数。
- 遍历cntFreq []数组,并检查cntFreq [i]%2 == 1,然后将cntOddFreq的值增加1 。
- 最后,检查cntOddFreq≤(K + 1),然后打印True 。
- 否则,输出False 。
下面是上述方法的实现:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to check if
// the string satisfies
// the given conditions or not
bool checkPalinK(string str, int K)
{
// Stores length of
// given string
int N = str.length();
// Stores frequency of
// each character of str
int cntFreq[256] = { 0 };
for (int i = 0; i < N;
i++) {
// Update frequency of
// current character
cntFreq[str[i]]++;
}
// Stores count of
// distinct character
// whose frequency is odd
int cntOddFreq = 0;
// Traverse the cntFreq[]
// array.
for (int i = 0; i < 256;
i++) {
// If frequency of
// character i is odd
if (cntFreq[i] % 2
== 1) {
// Update cntOddFreq
cntOddFreq++;
}
}
// If count of distinct character
// having odd frequency is <= K + 1
if (cntOddFreq <= (K + 1)) {
return true;
}
return false;
}
// Driver Code
int main()
{
string str = "geeksforgeeks";
int K = 2;
// If str satisfy
// the given conditions
if (checkPalinK(str, K)) {
cout << "Yes";
}
else {
cout << "No";
}
}
Java
// Java program to implement
// the above approach
import java.util.*;
class GFG{
// Function to check if
// the string satisfies
// the given conditions or not
public static boolean checkPalinK(String str,
int K)
{
// Stores length of
// given string
int N = str.length();
// Stores frequency of
// each character of str
int cntFreq[] = new int[256];
for(int i = 0; i < N; i++)
{
// Update frequency of
// current character
cntFreq[str.charAt(i)]++;
}
// Stores count of
// distinct character
// whose frequency is odd
int cntOddFreq = 0;
// Traverse the cntFreq[]
// array.
for(int i = 0; i < 256; i++)
{
// If frequency of
// character i is odd
if (cntFreq[i] % 2 == 1)
{
// Update cntOddFreq
cntOddFreq++;
}
}
// If count of distinct character
// having odd frequency is <= K + 1
if (cntOddFreq <= (K + 1))
{
return true;
}
return false;
}
// Driver Code
public static void main(String args[])
{
String str = "geeksforgeeks";
int K = 2;
// If str satisfy
// the given conditions
if (checkPalinK(str, K))
{
System.out.println("Yes");
}
else
{
System.out.println("No");
}
}
}
// This code is contributed by hemanth gadarla
Python3
# Python3 program to implement
# the above approach
# Function to check if the
# satisfies the given
# conditions or not
def checkPalinK(str, K):
# Stores length of
# given string
N = len(str)
# Stores frequency of
# each character of str
cntFreq = [0] * 256
for i in range(N):
# Update frequency of
# current character
cntFreq[ord(str[i])] += 1
# Stores count of
# distinct character
# whose frequency is odd
cntOddFreq = 0
# Traverse the cntFreq[]
# array.
for i in range(256):
# If frequency of
# character i is odd
if (cntFreq[i] % 2 == 1):
# Update cntOddFreq
cntOddFreq += 1
# If count of distinct character
# having odd frequency is <= K + 1
if (cntOddFreq <= (K + 1)):
return True
return False
# Driver Code
if __name__ == '__main__':
str = "geeksforgeeks"
K = 2
# If str satisfy
# the given conditions
if (checkPalinK(str, K)):
print("Yes")
else:
print("No")
# This code is contributed by mohit kumar 29
C#
// C# program to implement
// the above approach
using System;
class GFG{
// Function to check if
// the string satisfies
// the given conditions or not
public static bool checkPalinK(String str,
int K)
{
// Stores length of
// given string
int N = str.Length;
// Stores frequency of
// each character of str
int []cntFreq = new int[256];
for(int i = 0; i < N; i++)
{
// Update frequency of
// current character
cntFreq[str[i]]++;
}
// Stores count of
// distinct character
// whose frequency is odd
int cntOddFreq = 0;
// Traverse the cntFreq[]
// array.
for(int i = 0; i < 256; i++)
{
// If frequency of
// character i is odd
if (cntFreq[i] % 2 == 1)
{
// Update cntOddFreq
cntOddFreq++;
}
}
// If count of distinct character
// having odd frequency is <= K + 1
if (cntOddFreq <= (K + 1))
{
return true;
}
return false;
}
// Driver Code
public static void Main(String []args)
{
String str = "geeksforgeeks";
int K = 2;
// If str satisfy
// the given conditions
if (checkPalinK(str, K))
{
Console.WriteLine("Yes");
}
else
{
Console.WriteLine("No");
}
}
}
// This code is contributed by Amit Katiyar
Javascript
输出:
Yes
时间复杂度: O(N + 256),其中N是给定字符串的长度。
辅助空间: O(256)