落書きノート

ふと自分が気になった事を書いてます

Javaで問題を解く 書き換えて工夫

追記 ソースコードを修正しました。よく見てやらないとな〜。笑

こんな感じに書き換えました。大分良くなったんじゃないでしょうか。後2問だけ書き換えれば新しい問題に取り組めます。まず、ウォーミングアップしよう。

世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法~

世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法~

// 問題1.1

import java.util.Scanner;
import java.util.Hashtable;

class q1_1_another {
    public static void main(String[] args) {
        Hashtable<Character, Boolean> numbers =
            new Hashtable<Character, Boolean>();
        Scanner scan = new Scanner(System.in);
        String input = scan.nextLine();
        for(char c : input.toCharArray())
            numbers.put(c, false);
        boolean flag = true;
        for(int i = 0; i < input.length(); i++) {
            char t = input.charAt(i);
            if(numbers.get(t)) {
                flag = false;
                break;
            }
            if(numbers.containsKey(t))
                numbers.put(t, true);
        }
        if(flag)
            System.out.println("固有の文字列です。");
        else
            System.out.println("固有の文字列ではありません。");
    }
}

// 問題1.1 別解

import java.util.Scanner;

class q1_1_another2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String input = scan.nextLine();
        String sentence = "";
        boolean flag = true;
        Outer:
        for(int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            sentence += c;
            for(int j = 0; j < sentence.length() - 1; j++) {
                char s = sentence.charAt(j);
                if(s == c) {
                    flag = false;
                    break Outer;
                }
            }
        }
        if(flag)
            System.out.println("固有の文字列です。");
        else
            System.out.println("固有の文字列ではありません。");
    }
}


// 問題1.2

import java.util.Scanner;
import java.util.Hashtable;
import java.util.Enumeration;

class q1_2_another {
    public static void main(String[] args) {
        Hashtable<Character, Integer> numbers =
            new Hashtable<Character, Integer>();
        Scanner scan = new Scanner(System.in);
        boolean flag = true;
        String input = scan.nextLine();
        String input2 = scan.nextLine();
        for(char c : input.toCharArray())
            if(numbers.containsKey(c))
                numbers.put(c, numbers.get(c) + 1);
            else
                numbers.put(c, 1);
        for(int i = 0; i < input2.length(); i++) {
            char c = input2.charAt(i);
            if(numbers.containsKey(c) && numbers.get(c) > 0)
                numbers.put(c, numbers.get(c) - 1);
            else {
                flag = false;
                break;
            }
        }
        Enumeration<Integer> e = numbers.elements();
        while(e.hasMoreElements())
            if(e.nextElement() > 0) {
                flag = false;
                break;
            }
        if(flag)
            System.out.println("この二つの文字列は並び替えになっています。");
        else
            System.out.println("この二つの文字列は並び替えになっていません。");
    }
}