14 Stimmen

Schreiben Sie eine Funktion, die zwei Zeichenketten vergleicht und eine dritte Zeichenkette zurückgibt, die nur die Buchstaben enthält, die in beiden vorkommen

Ich habe diese Hausaufgabe. Und habe sie auf folgende Weise gelöst. Ich brauche Ihre Kommentare, ob dies ein guter Ansatz ist oder ob ich eine andere Datenstruktur verwenden muss, um die Aufgabe besser zu lösen.

    public string ReturnCommon(string firstString, string scndString)
    {
        StringBuilder newStb = new StringBuilder();
        if (firstString != null && scndString != null)
        {
            foreach (char ichar in firstString)
            {
                if (!newStb.ToString().Contains(ichar) && scndString.Contains(ichar))
                    newStb.Append(ichar);
            }
        }
        return newStb.ToString();
    }

1voto

Kniganapolke Punkte 4813

LINQ verwenden:

a.ToCharArray().Intersect<char>(b.ToCharArray())

Dabei ist jedoch die Groß- und Kleinschreibung zu beachten.

0voto

Peter Lee Punkte 12165

Zu Ihrer Information: Hier ist der C/C++-Code:

/* Q: Write a function f(a, b) which takes two character string arguments
      and returns a string containing only the characters found in both
      strings in the order of a. */

#include <iostream>
#include <string>
#include <cstring>
#include <map>
using namespace std;

/* A: Unclear: repeated chars in string a? */
string CommonChars(const char* a, const char* b)
{
    string result("");

    if (!a || !b || !*a || !*b)
        return result;

    map<char, bool> hash;
    int len1 = strlen(a), len2 = strlen(b);

    for (int i = 0; i < len2; ++i)
        hash[b[i]] = true;

    for (int i = 0; i < len1; ++i)
    {
        map<char, bool>::iterator it = hash.find(a[i]);
        if (it != hash.end() && it->second)
        {
            result += a[i];
            hash[a[i]] = false; // OR:  hash.erase(it);
        }
    }

    return result;
}

int main()
{
    cout << CommonChars("abcdefgbx", "gcfcba") << endl;

    return 0;
}
/* Output:
abcfg
 */

0voto

gaetano Punkte 765

Hier meine Lösung in Python. Wenn ich mich nicht irre, sollte es linear O(n) Zeit dauern.

# Write a function f(a, b) which takes two character string arguments
# and returns a string containing only the characters found in both
# strings in the order of a. 
first_string = "attempt" 
second_string="tmay" #second string
result = []

#it's O(n) operation
for char in first_string:
   if char in second_string:
      if char not in result:
         result.append(char)

print result

Die Ergebnisse sehen wie folgt aus:

['a', 't', 'm']

0voto

S Gabale Punkte 7

Erstellen Sie eine Funktion, die zwei Zeichenfolgen als Argumente annimmt und die Anzahl der Vorkommen der ersten Zeichenfolge (das einzelne Zeichen) in der zweiten Zeichenfolge zurückgibt.

function charCount(myChar, str) {
    let newstr = str.split(myChar).length-1;
    return newstr;
}

-1voto

JustAPleb Punkte 209

Sieht für mich OK aus, aber um Himmels willen, verwenden Sie beschreibende Variablennamen!!!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X