C# :: Aufgabe #371

3 Lösungen Lösungen öffentlich

Erstes einzelnes Zeichen in einem String

Anfänger - C# von JKooP - 06.03.2021 um 18:25 Uhr
Erstelle eine Methode/Funktion, mit der man den Index des ersten einzeln
vorkommenden Zeichens in einem String (Text) ermitteln kann.
Groß- und Kleinschreibung soll nicht unterschieden werden.

Hinweise:
String ist nullbasiert.
Wenn es keine Lösung gibt, soll -1 ausgegeben werden.

Beispiele:
trainyourprogrammer => 0 (t)
lovegenericlists => 1 (o)
lovelollorosso => 2 (v)
otto => -1

Viel Spaß

Lösungen:

vote_ok
von hollst (13680 Punkte) - 07.04.2021 um 18:57 Uhr
Quellcode ausblenden C#-Code
using static System.Console;

string[] test = new string[] { "trainyourprogrammer", "llovegenericlists", "lovelollorosso", "otto" };
for (var i = 0; i < test.Length; i++)
    WriteLine($"{test[i]} {test[i].Solution()}");
ReadKey();

static class Extension
{
    public static int Solution(this string ss)  {
        string s = ss.ToUpper();
        for (var i = 0; i < s.Length; i++) {
            bool bo_found = false;
            for (var j = i + 1; j < s.Length; j++)
                if (s[i] == s[j])
                    bo_found = true;
            if (!bo_found)
                for(var k = i - 1; k >= 0; k--)
                    if (s[i] == s[k])
                        bo_found = true;
            if (!bo_found)
                return i;
        }
        return -1;
    }
}
vote_ok
von JKooP (13960 Punkte) - 13.04.2021 um 18:44 Uhr
NET 5.x; C# 9.x; VS-2019
Quellcode ausblenden C#-Code
using System.Linq;

System.Console.WriteLine(FirstUniqueChar("lovelollorosso"));

static int FirstUniqueChar(string s) => s.IndexOf(s.GroupBy(x => x).Select(x => new { key = x.Key, count = x.Count() })
    .Where(x => x.count == 1).Select(x => x.key).FirstOrDefault());
vote_ok
von JKooP (13960 Punkte) - 23.04.2021 um 09:03 Uhr
NET 5.x; C# 9.x; VS-2019
Quellcode ausblenden C#-Code
System.Console.WriteLine(FirstUniqueChar("lovelollorosso"));

int FirstUniqueChar(string s)
{
    var a = new int[26];

    for (var i = 0; i < s.Length; i++)
        a[s[i] - 'a']++;

    for (var i = 0; i < s.Length; i++)
        if (a[s[i] - 'a'] == 1)
            return i;

    return -1;
}