📌  相关文章
📜  在不删除字符的情况下制作两个字符串 Anagram 所需的最小操作数

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

在不删除字符的情况下制作两个字符串 Anagram 所需的最小操作数

给定两个字符串s1s2 ,我们需要找到在不删除任何字符的情况下生成两个字符串anagram 所需的最少操作次数。

注意: -字谜字符串具有相同的字符集,字符序列可以不同。
如果允许删除字符并给出成本,请参阅使两个字符串相同的最低成本
问题来源:Yatra.com 面试经历 |设置 7

例子:

Input : 
       s1 = "aba"
       s2 = "baa"
Output : 0
Explanation: Both String contains identical characters

Input :
       s1 = "ddcf"
       s2 = "cedk"
Output : 2
Explanation : Here, we need to change two characters
in either of the strings to make them identical. We 
can change 'd' and 'f' in s1 or 'e' and 'k' in s2.

假设:两个字符串的长度被认为是相似的

C++
// C++ Program to find minimum number
// of manipulations required to make
// two strings identical
#include 
using namespace std;
 
    // Counts the no of manipulations
    // required
    int countManipulations(string s1, string s2)
    {
         
        int count = 0;
 
        // store the count of character
        int char_count[26];
         
        for (int i = 0; i < 26; i++)
        {
            char_count[i] = 0;
        }
 
        // iterate though the first String
        // and update count
        for (int i = 0; i < s1.length(); i++)
            char_count[s1[i] - 'a']++;
 
        // iterate through the second string
        // update char_count.
        // if character is not found in
        // char_count then increase count
        for (int i = 0; i < s2.length(); i++)
        {
            char_count[s2[i] - 'a']--;      
        }
       
        for(int i = 0; i < 26; ++i)
        {
          if(char_count[i] != 0)
          {
            count+=abs(char_count[i]);
          }
        }
        return count / 2;
    }
 
    // Driver code
    int main()
    {
 
        string s1 = "ddcf";
        string s2 = "cedk";
         
        cout<


Java
// Java Program to find minimum number of manipulations
// required to make two strings identical
public class Similar_strings {
 
    // Counts the no of manipulations required
    static int countManipulations(String s1, String s2)
    {
        int count = 0;
 
        // store the count of character
        int char_count[] = new int[26];
 
        // iterate though the first String and update
        // count
        for (int i = 0; i < s1.length(); i++)
            char_count[s1.charAt(i) - 'a']++;       
 
        // iterate through the second string
        // update char_count.
        // if character is not found in char_count
        // then increase count
        for (int i = 0; i < s2.length(); i++)
        {
            char_count[s2.charAt(i) - 'a']--;
        }
       
        for(int i = 0; i < 26; ++i)
        {
          if(char_count[i] != 0)
          {
            count+= Math.abs(char_count[i]);
          }
        }
         
        return count / 2;
    }
 
    // Driver code
    public static void main(String[] args)
    {
 
        String s1 = "ddcf";
        String s2 = "cedk";
        System.out.println(countManipulations(s1, s2));
    }
}


Python3
# Python3 Program to find minimum number
# of manipulations required to make
# two strings identical
 
# Counts the no of manipulations
# required
def countManipulations(s1, s2):
     
    count = 0
 
    # store the count of character
    char_count = [0] * 26
     
    for i in range(26):
        char_count[i] = 0
 
    # iterate though the first String
    # and update count
    for i in range(len( s1)):
        char_count[ord(s1[i]) -
                   ord('a')] += 1
 
    # iterate through the second string
    # update char_count.
    # if character is not found in
    # char_count then increase count
    for i in range(len(s2)):
        char_count[ord(s2[i]) - ord('a')] -= 1
         
    for i in range(26):
        if char_count[i] != 0:
            count += abs(char_count[i])
         
 
    return count / 2
 
# Driver code
if __name__ == "__main__":
 
    s1 = "ddcf"
    s2 = "cedk"
     
    print(countManipulations(s1, s2))
 
# This code is contributed by ita_c


C#
// C# Program to find minimum number
// of manipulations required to make
// two strings identical
using System;
 
public class GFG {
 
    // Counts the no of manipulations
    // required
    static int countManipulations(string s1,
                                  string s2)
    {
        int count = 0;
 
        // store the count of character
        int []char_count = new int[26];
 
        // iterate though the first String
        // and update count
        for (int i = 0; i < s1.Length; i++)
            char_count[s1[i] - 'a']++;
 
        // iterate through the second string
        // update char_count.
        // if character is not found in
        // char_count then increase count
        for (int i = 0; i < s2.Length; i++)
            char_count[s2[i] - 'a']--;
       
        for(int i = 0; i < 26; ++i)
        {
            if(char_count[i] != 0)
            {
              count+= Math.Abs(char_count[i]);
            }
        }
         
        return count / 2;
    }
 
    // Driver code
    public static void Main()
    {
 
        string s1 = "ddcf";
        string s2 = "cedk";
         
        Console.WriteLine(
            countManipulations(s1, s2));
    }
}
 
// This code is contributed by vt_m.


PHP


Javascript


输出:

2

时间复杂度: O(n) ,其中n是字符串的长度。