Imprimir caracteres comunes de dos strings en orden alfabético

Dadas dos strings, imprime todos los caracteres comunes en orden lexicográfico . Si no hay letras comunes, imprima -1. Todas las letras son minúsculas. 
 

Ejemplos: 

C++

// C++ program to print common characters
// of two Strings in alphabetical order
#include<bits/stdc++.h>
using namespace std;
 
int main()
{
    string s1 = "geeksforgeeks";
    string s2 = "practiceforgeeks";
     
    // to store the count of
    // letters in the first string
    int a1[26] = {0};
     
    // to store the count of
    // letters in the second string
    int a2[26] = {0};
    int i , j;
    char ch;
    char ch1 = 'a';
    int k = (int)ch1, m;
     
    // for each letter present, increment the count
    for(i = 0 ; i < s1.length() ; i++)
    {
        a1[(int)s1[i] - k]++;
    }
    for(i = 0 ; i < s2.length() ; i++)
    {
        a2[(int)s2[i] - k]++;
    }
 
    for(i = 0 ; i < 26 ; i++)
    {
        // the if condition guarantees that
        // the element is common, that is,
        // a1[i] and a2[i] are both non zero
        // means that the letter has occurred
        // at least once in both the strings
        if (a1[i] != 0 and a2[i] != 0)
        {
            // print the letter for a number
            // of times that is the minimum
            // of its count in s1 and s2
            for(j = 0 ; j < min(a1[i] , a2[i]) ; j++)
            {
                m = k + i;
                ch = (char)(k + i);
                cout << ch;
            }
        }
    }
    return 0;
}

Java

// Java program to print common characters
// of two Strings in alphabetical order
import java.io.*;
import java.util.*;
 
// Function to find similar characters
public class Simstrings
{
    static final int MAX_CHAR = 26;
 
    static void printCommon(String s1, String s2)
    {
       // two arrays of length 26 to store occurrence
        // of a letters alphabetically for each string
        int[] a1 = new int[MAX_CHAR];
        int[] a2 = new int[MAX_CHAR];
 
        int length1 = s1.length();
        int length2 = s2.length();
 
        for (int i = 0 ; i < length1 ; i++)
           a1[s1.charAt(i) - 'a'] += 1;
 
        for (int i = 0 ; i < length2 ; i++)
           a2[s2.charAt(i) - 'a'] += 1;
 
        // If a common index is non-zero, it means
        // that the letter corresponding to that
        // index is common to both strings
        for (int i = 0 ; i < MAX_CHAR ; i++)
        {
            if (a1[i] != 0 && a2[i] != 0)
            {
                // Find the minimum of the occurrence
                // of the character in both strings and print
                // the letter that many number of times
                for (int j = 0 ; j < Math.min(a1[i], a2[i]) ; j++)
                    System.out.print(((char)(i + 'a')));
            }
        }
    }
 
    // Driver code
    public static void main(String[] args) throws IOException
    {
        String s1 = "geeksforgeeks", s2 = "practiceforgeeks";
        printCommon(s1, s2);
    }
}

Python3

# Python3 program to print common characters
# of two Strings in alphabetical order
 
 
# Initializing size of array
MAX_CHAR=26
 
# Function to find similar characters
def printCommon( s1, s2):
    # two arrays of length 26 to store occurrence
    # of a letters alphabetically for each string
    a1 = [0 for i in range(MAX_CHAR)]
    a2 = [0 for i in range(MAX_CHAR)]
 
    length1 = len(s1)
    length2 = len(s2)
 
    for i in range(0,length1):
        a1[ord(s1[i]) - ord('a')] += 1
 
    for i in range(0,length2):
        a2[ord(s2[i]) - ord('a')] += 1
 
    # If a common index is non-zero, it means
    # that the letter corresponding to that
    # index is common to both strings
    for i in range(0,MAX_CHAR):
        if (a1[i] != 0 and a2[i] != 0):
             
            # Find the minimum of the occurrence
            # of the character in both strings and print
            # the letter that many number of times
            for j in range(0,min(a1[i],a2[i])):
                ch = chr(ord('a')+i)
                print (ch, end='')
             
 
# Driver code
if __name__=="__main__":
    s1 = "geeksforgeeks"
    s2 = "practiceforgeeks"
    printCommon(s1, s2);
 
# This Code is contributed by Abhishek Sharma

C#

// C# program to print common characters
// of two Strings in alphabetical order
 
using System;
// Function to find similar characters
public class Simstrings
{
    static int MAX_CHAR = 26;
  
    static void printCommon(string s1, string s2)
    {
       // two arrays of length 26 to store occurrence
        // of a letters alphabetically for each string
        int[] a1 = new int[MAX_CHAR];
        int[] a2 = new int[MAX_CHAR];
  
        int length1 = s1.Length;
        int length2 = s2.Length;
  
        for (int i = 0 ; i < length1 ; i++)
           a1[s1[i] - 'a'] += 1;
  
        for (int i = 0 ; i < length2 ; i++)
           a2[s2[i] - 'a'] += 1;
  
        // If a common index is non-zero, it means
        // that the letter corresponding to that
        // index is common to both strings
        for (int i = 0 ; i < MAX_CHAR ; i++)
        {
            if (a1[i] != 0 && a2[i] != 0)
            {
                // Find the minimum of the occurrence
                // of the character in both strings and print
                // the letter that many number of times
                for (int j = 0 ; j < Math.Min(a1[i], a2[i]) ; j++)
                    Console.Write(((char)(i + 'a')));
            }
        }
    }
  
    // Driver code
    public static void Main()
    {
        string s1 = "geeksforgeeks", s2 = "practiceforgeeks";
        printCommon(s1, s2);
    }
}

Javascript

<script>
// Javascript program to print common characters
// of two Strings in alphabetical order
     
    let MAX_CHAR = 26;
    // Function to find similar characters
    function printCommon(s1,s2)
    {
        // two arrays of length 26 to store occurrence
        // of a letters alphabetically for each string
        let a1 = new Array(MAX_CHAR);
        let a2 = new Array(MAX_CHAR);
        for(let i=0;i<MAX_CHAR;i++)
        {
            a1[i]=0;
            a2[i]=0;
        }
   
        let length1 = s1.length;
        let length2 = s2.length;
   
        for (let i = 0 ; i < length1 ; i++)
           a1[s1[i].charCodeAt(0) - 'a'.charCodeAt(0)] += 1;
   
        for (let i = 0 ; i < length2 ; i++)
           a2[s2[i].charCodeAt(0) - 'a'.charCodeAt(0)] += 1;
   
        // If a common index is non-zero, it means
        // that the letter corresponding to that
        // index is common to both strings
        for (let i = 0 ; i < MAX_CHAR ; i++)
        {
            if (a1[i] != 0 && a2[i] != 0)
            {
                // Find the minimum of the occurrence
                // of the character in both strings and print
                // the letter that many number of times
                for (let j = 0 ; j < Math.min(a1[i], a2[i]) ; j++)
                    document.write((String.fromCharCode(i + 'a'.charCodeAt(0))));
            }
        }
    }
     
    // Driver code
    let s1 = "geeksforgeeks", s2 = "practiceforgeeks";
    printCommon(s1, s2);
     
     
     
    // This code is contributed by avanitrachhadiya2155
</script>

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *