Zwei Strings Gleiche Zeichen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Zwei Strings Gleiche Zeichen

    Hallo
    Da mir in letzer Zeit etwas langweilig geworden ist, wollte ich mal bei Projekt Euler ein paar Probleme lösen.
    Bei Problem 52 bin ich allerdings stecken geblieben.Dort geht geht es darum, dass zwei Strings/Arrays möglicherweise die gleichen Zeichen enthalten diese jedoch vertauscht sein könnten.
    Folgenden Code hab ich zur Lösung des Problems bereits versucht. Leider ohne Erfolg.

    VB.NET-Quellcode

    1. Private Function isSame(ByVal str1 As String, ByVal str2 As String) As Boolean
    2. If str1.Length <> str2.Length Then Return False
    3. Dim b As Boolean = True
    4. For x As Integer = 0 To str1.Length - 1
    5. b = True
    6. For y As Integer = 0 To str1.Length - 1
    7. Dim c = str2(y)
    8. Dim c2 = str1(x)
    9. If str1(x) = str2(y) Then
    10. b = False
    11. Exit For
    12. End If
    13. Next
    14. If b Then Return False
    15. Next
    16. Return True
    17. End Function

    Ich weiß, dass es in der Mathematik dafür Mengen gibt ,wie man aber dieses Problem in VB löst ist mir aber unbekannt.
    Würde mich über Anregungen und Tipps freuen

    Mfg Compffreak

    compffreak schrieb:

    Dort geht geht es darum, dass zwei Strings/Arrays möglicherweise die gleichen Zeichen enthalten diese jedoch vertauscht sein könnten.
    Kannst Du mal zur Verdeutlichung ein Beispiel posten, wie das gemeint ist?
    -----
    OK.
    Trivialbeispiel:
    0
    1*0
    ...
    6*0
    -----
    Mögliche Herangehensweise:
    Zahlen in Ziffern-Array zerlegen, dieses Array sortieren, mit anderem genau so generiertem Array vergleichen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Private Liste As New List(Of Char)
    2. Private Function Compare(str As String, str2 As String) As Boolean
    3. Liste.AddRange(str.ToCharArray)
    4. For Each item In str2
    5. If Liste.Contains(item) Then
    6. Liste.Remove(item)
    7. Continue For
    8. End If
    9. Return False
    10. Next
    11. Return Not Liste.Any
    12. End Function


    € Da ist aber nen kleiner Fehler drinne :thumbdown:
    € gefixxt :p


    und noch eine Möglichkeit:

    VB.NET-Quellcode

    1. Private Function Compare(str As String, str2 As String) As Boolean
    2. Dim list As List(Of Char) = str.ToList
    3. Dim liste As List(Of Char) = str2.ToList
    4. list.Sort()
    5. liste.Sort()
    6. Return liste.Zip(list, Function(item, it) item = it).All(Function(ite) ite)
    7. End Function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RushDen“ ()

    @compffreak:: Um einen vergleichbaren Zustand zu erzielen:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim value = 125874
    3. Dim ziffern = New List(Of Integer)
    4. Do While value > 0
    5. Dim rest = value Mod 10
    6. ziffern.Add(rest)
    7. value \= 10
    8. Loop
    9. ziffern.Sort()
    10. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    oder so:

    VB.NET-Quellcode

    1. Dim result As Boolean
    2. Dim a = {"1"c, "2"c, "3"c}
    3. Dim b = {"3"c, "2"c, "1"c}
    4. If a.Count = b.Count AndAlso a.Intersect(b).Count = a.Count Then result = True

    oder besser siehe @AliveDevil:

    VB.NET-Quellcode

    1. Dim result = Enumerable.SequenceEqual(Enumerable.Union(a, b), a)

    sorry, ist schon erledigt...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()