@Sawayadi

Как в символьном рядке найти все пары одинаковых чисел похожие по количеству и составу цифр(числа отличаются только перестановкой цифр)?

У меня есть символьный рядок и мне надо вывести пару чисел похожие по количеству и составу цифр, но они отличаются перестановкой цифр.
Я пробовал сделать поиск таких чисел, но вышло плохо. Я пока не очень понимаю как так делать.
package com.company;

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Введите рядок: ");
String d = null;
        int count = 0;
        for (String retval : s.split(" ")) {
            System.out.println(" " + retval);
            if (retval == d){
                count++;
            }
        }
        System.out.println("Одинаковые числа: " + count);
}
}
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
Bavashi
@Bavashi Куратор тега Java
public static void main(String[] args) {
        HashSet<String> result = new HashSet<String>();
        Scanner in = new Scanner(System.in);
        System.out.println("Введите рядок: ");
        String[] inputArr = in.nextLine().split(" ");
        
        for (int i=0; i<inputArr.length; i++) {
            if (Integer.parseInt(inputArr[i])>9) {
            for (int j=i+1; j<inputArr.length; j++) {
                if (!inputArr[i].equals(inputArr[j]) && inputArr[i].length() == inputArr[j].length()) {
                    String[] temp1 = inputArr[i].split("");
                    String[] temp2 = inputArr[j].split("");
                    boolean check1 = Arrays.asList(temp1).containsAll(Arrays.asList(temp2));
                    boolean check2 = Arrays.asList(temp2).containsAll(Arrays.asList(temp1));
                    if (check1 && check2) {
                        result.add(inputArr[i]+'-'+inputArr[j]);
                    }
                }       
            }
            }
        }
        System.out.println("Одинаковые числа: " + result);
    }


Upd: в комментариях высказано мнение, что похожие числа должны быть равными.

public static void main(String[] args) {
        HashSet<String> result = new HashSet<String>();
        Scanner in = new Scanner(System.in);
        System.out.println("Введите рядок: ");
        String[] inputArr = in.nextLine().split(" ");
        
        for (int i=0; i<inputArr.length; i++) {
            if (Integer.parseInt(inputArr[i])>9) {
            for (int j=i+1; j<inputArr.length; j++) {
                if (!inputArr[i].equals(inputArr[j]) && inputArr[i].length() == inputArr[j].length()) {
                    String[] temp1 = inputArr[i].split("");
                    String[] temp2 = inputArr[j].split("");
                    Arrays.sort(temp1);
                    Arrays.sort(temp2);
                    
                    if (Arrays.equals(temp1, temp2)) {
                        result.add(inputArr[i]+'-'+inputArr[j]);
                    }
                }       
            }
            }
        }
        System.out.println("Одинаковые числа: " + result);
    }

Input:
1 2 3 12 21 43 44 45 123 321 122 322 1222 222 12345 54321 54321 54322 12345678 81726354 87654321 123456789 987654321 1234567890 122 112 123445566 234555661

Output:
[123-321, 12-21, 123456789-987654321, 81726354-87654321, 12345678-81726354, 12345-54321, 12345678-87654321]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы