📜  n 个字符串中的常用字符

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

n 个字符串中的常用字符

给定 n 个字符串,找出所有字符串中的共同字符。简单来说,找到所有字符中出现的字符串,并按字母顺序或字典顺序显示。
注意*我们将考虑字符串仅包含小写字母。
例子

Input :  geeksforgeeks
         gemkstones
         acknowledges
         aguelikes

Output : e g k s

Input :  apple 
         orange

Output : a e

我们将使用两个大小为 26 的哈希数组(对于 az,其中 0 是 a,z 是 25)。
方法很简单,如果我们在标记之前已经看到了一个字符,并且如果我们还没有忽略该字符,因为它不是一个常见的字符。
伪代码

commonCharacters :
for i= 0 to n-1:

   // here m is length of ith string 
   for j = 0 to m-1:  
      if ( character seen before ) :
         mark the character
      else : 
         ignore it

display all the marked characters 

C++
// CPP Program to find all the common characters
// in n strings
#include 
using namespace std;
 
const int MAX_CHAR = 26;
 
void commonCharacters(string str[], int n)
{
    // primary array for common characters
    // we assume all characters are seen before.
    bool prim[MAX_CHAR];
    memset(prim, true, sizeof(prim));
 
    // for each string
    for (int i = 0; i < n; i++) {
 
        // secondary array for common characters
        // Initially marked false
        bool sec[MAX_CHAR] = { false };
 
        // for every character of ith string
        for (int j = 0; str[i][j]; j++) {
 
            // if character is present in all
            // strings before, mark it.
            if (prim[str[i][j] - 'a'])
                sec[str[i][j] - 'a'] = true;
        }
 
        // copy whole secondary array into primary
        memcpy(prim, sec, MAX_CHAR);
    }
 
    // displaying common characters
    for (int i = 0; i < 26; i++)
        if (prim[i])
            printf("%c ", i + 'a');
}
 
// Driver's Code
int main()
{
    string str[] = { "geeksforgeeks",
                    "gemkstones",
                    "acknowledges",
                    "aguelikes" };
    int n = sizeof(str)/sizeof(str[0]);
    commonCharacters(str, n);
    return 0;
}


Java
// Java Program to find all the common characters
// in n strings
import java.util.*;
import java.lang.*;
 
class GFG {
 
    static int MAX_CHAR = 26;
 
    public static void commonCharacters(String str[],
                                               int n)
    {
         
        // primary array for common characters
        // we assume all characters are seen before.
        Boolean[] prim = new Boolean[MAX_CHAR];
        Arrays.fill(prim, new Boolean(true));
 
        // for each string
        for (int i = 0; i < n; i++) {
 
            // secondary array for common characters
            // Initially marked false
            Boolean[] sec = new Boolean[MAX_CHAR];
            Arrays.fill(sec, new Boolean(false));
 
            // for every character of ith string
            for (int j = 0; j < str[i].length(); j++)
            {
 
                // if character is present in all
                // strings before, mark it.
                if (prim[str[i].charAt(j) - 'a'])
                sec[str[i].charAt(j) - 'a'] = true;
            }
 
            // copy whole secondary array into primary
            System.arraycopy(sec, 0, prim, 0, MAX_CHAR);
        }
 
        // displaying common characters
        for (int i = 0; i < 26; i++)
            if (prim[i]){
                System.out.print(Character.toChars(i
                                               + 97));
                System.out.print(" ");
            }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        String str[] = { "geeksforgeeks",
                         "gemkstones",
                         "acknowledges",
                         "aguelikes" };
                          
        int n = str.length;
        commonCharacters(str, n);
    }
}
 
// This code is contributed by Prasad Kshirsagar


Python3
# Python3 Program to find all the
# common characters in n strings
MAX_CHAR = 26
 
def commonCharacters(strings, n) :
     
    # primary array for common characters
    # we assume all characters are seen before.
    prim = [True] * MAX_CHAR
     
    # for each strings
    for i in range(n):
         
        # secondary array for common characters
        # Initially marked false
        sec = [False] * MAX_CHAR
 
        # for every character of ith strings
        for j in range(len(strings[i])):
 
            # if character is present in all
            # strings before, mark it.
            if (prim[ord(strings[i][j]) - ord('a')]) :
                sec[ord(strings[i][j]) -
                    ord('a')] = True
 
        # copy whole secondary array
        # into primary
        for i in range(MAX_CHAR):
            prim[i] = sec[i]
 
    # displaying common characters
    for i in range(26):
        if (prim[i]) :
            print("%c " % (i + ord('a')),
                               end = "")
 
# Driver's Code
strings = [ "geeksforgeeks", "gemkstones",
            "acknowledges", "aguelikes" ]
n = len(strings)
commonCharacters(strings, n)
 
# This code is contributed by Niwesh Gupta


C#
// C# Program to find all the
// common characters in n strings
using System;
 
class GFG
{
 
    static int MAX_CHAR = 26;
 
    public static void commonCharacters(String []str,
                                            int n)
    {
         
        // primary array for common characters
        // we assume all characters are seen before.
        Boolean[] prim = new Boolean[MAX_CHAR];
         
        for(int i = 0; i < prim.Length; i++)
            prim[i] = true;
 
        // for each string
        for (int i = 0; i < n; i++)
        {
 
            // secondary array for common characters
            // Initially marked false
            Boolean[] sec = new Boolean[MAX_CHAR];
             
            for(int s = 0; s < sec.Length; s++)
                sec[s]=false;
 
            // for every character of ith string
            for (int j = 0; j < str[i].Length; j++)
            {
 
                // if character is present in all
                // strings before, mark it.
                if (prim[str[i][j] - 'a'])
                sec[str[i][j] - 'a'] = true;
            }
 
            // Copy whole secondary array into primary
            Array.Copy(sec, 0, prim, 0, MAX_CHAR);
        }
 
        // Displaying common characters
        for (int i = 0; i < 26; i++)
            if (prim[i])
            {
                Console.Write((char)(i + 97));
                Console.Write(" ");
            }
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        String []str = { "geeksforgeeks",
                        "gemkstones",
                        "acknowledges",
                        "aguelikes" };
                         
        int n = str.Length;
        commonCharacters(str, n);
    }
}
 
// This code is contributed by Rajput-JI


Javascript


输出:

e g k s