ふわ

2021年04月04日に参加

学習履歴詳細

Java 演習問題 2問目(最初の反復していない文字を取り出す)

問題

与えられた文字列から最初の反復していない文字を出力する。

答えの写経

与えられた文字列がASCIIの文字であれば、以下のコードでいけるらしい。mainメソッドを実行しても、想定結果("v")が出力されず、"a"が出力される。次回、デバッグしよう。

所感

コードの意味がわからない場合は、ChatGPTに教えてもらうことができる。これは勉強捗りそう。以下のコードでやりたいこと、意図していることは理解できたが、なぜ想定結果が出力されないのだろう。。

package S_2;

//Finding the first non-repeated character: Write a program that returns the first non-repeated character from a given string.

public class Main {
    private static final int EXTENDED_ASCII_CODES = 256;

    public static void main(String[] args) {

        String sample = "aaaaav";
        char ch = Main.firstNonRepeatedCharacter(sample);
        System.out.println(ch);
    }

    public static char firstNonRepeatedCharacter(String str){
        //Why is it 256??
        int[] flags = new int[EXTENDED_ASCII_CODES];

        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (flags[ch] == -1) {
                flags[ch] = i;
            } else {
                flags[ch] = -2;
            }
        }

        int position = Integer.MAX_VALUE;

        for (int i = 0; i < EXTENDED_ASCII_CODES; i++) {
            if (flags[i] >= 0) {
                position = Math.min(position, flags[i]);
            }
        }

        return position == Integer.MAX_VALUE ?
                Character.MIN_VALUE : str.charAt(position);
    }
}

Linux
Java
Git / GitHub

2023年06月05日(月)

1.3時間