C#で解くLeetCode「387. First Unique Character in a String」

概要

エンジニア職での就職・転職では会社によってはコーディングテストというものがあります。
新卒でも中途でも入社したい会社というのは誰でもいい環境を求めるのではないでしょうか。
そこで、コーディングテストで振り落とされないためにもLeetCodeというテスト対策ができるサイトでアルゴリズム力を鍛えたいと思います。

問題

387. First Unique Character in a String

文字列sが与えられたとき最初の一意な文字を探し、そのインデックスを返す。
もし一意な文字が存在しなければ、-1を返す。

制約

  • 1 <= s.length <= 105
  • sは小文字の英字のみで構成されています。

解説

初めに各文字の出現回数を記録するためにアルファベットの数の26個分配列を用意します。

FirstUniqChar
// 出現回数を記録するためアルファベット分の配列を用意する
int[] alphabetIndex = new int[26];

次に、渡された文字から一文字ずつ確認し、出現回数を記録します。
記録方法は渡された文字から'a' を引いてアルファベットの何番目かを割り出せます。

FirstUniqChar
// 一文字ずつ取り出して対象の文字の出現回数を増やして記録する
for (int i = 0; i < s.Length; i++)
{
    alphabetIndex[s[i] - 'a']++;
}

最後に順番に出現回数を確認し、1回しか出現していない場合インデックスを返し、見つからなかった場合-1を返して終了です。

FirstUniqChar
// アルファベット順に出現回数を確認する
for (int i = 0; i < s.Length; i++)
{
    // 出現回数が一回のみだった場合対象のインデックスを返す
    if (alphabetIndex[s[i] - 'a'] == 1)
    {
        return i;
    }
}
return -1;

ソースコード

Solution.cs
public class Solution {
    public int FirstUniqChar(string s) {
        // 出現回数を記録するためアルファベット分の配列を用意する
        int[] alphabetIndex = new int[26];

        // 一文字ずつ取り出して対象の文字の出現回数を増やして記録する
        for (int i = 0; i < s.Length; i++)
        {
            alphabetIndex[s[i] - 'a']++;
        }

        // アルファベット順に出現回数を確認する
        for (int i = 0; i < s.Length; i++)
        {
            // 出現回数が一回のみだった場合対象のインデックスを返す
            if (alphabetIndex[s[i] - 'a'] == 1)
            {
                return i;
            }
        }
        return -1;

    }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です