Как сделать этот код более эффективным? - PullRequest
0 голосов
/ 14 июля 2020

Итак, я занимаюсь соревновательным программированием, используя java, мой код ПРИНЯТ в codeforces. Но я все еще думаю, что этот код выглядит не очень хорошо, потому что ему нужно 2 цикла for для определения дублирования. если это только один цикл "for", он все еще имеет дублирование в строках.

Это проблема: https://codeforces.com/problemset/problem/236/A.

В общем, код попытается найти отдельные символы в строках, затем, если длина строки нечетная, будет напечатано «ИГНОРИРОВАТЬ ЕГО», иначе «ЧАТ С НЕЙ!».

import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
        String a;
    
        int counter=0;
        Scanner sc= new Scanner(System.in);
        a=sc.next();
        StringBuilder b= new StringBuilder(a);
        int count = 0;
    
        for(int i=0;i<b.length();i++)
        {
            for(int j=i+1;j<b.length();j++) {
                if(b.charAt(i)==b.charAt(j)) {
                    b=b.deleteCharAt(j);
                }
    
            }
        }
            for(int i=0;i<b.length();i++)
            {
                for(int j=i+1;j<b.length();j++) {
                    if(b.charAt(i)==b.charAt(j)) {
                        b=b.deleteCharAt(j);
                    }
    
                }
            }
    
        counter=b.length();
        if(counter%2==0)
        {
            System.out.println("CHAT WITH HER!");
    
        }
        else
        {
            System.out.println("IGNORE HIM!");
        }
        }
    }

Ответы [ 4 ]

3 голосов
/ 14 июля 2020

Вы можете заменить большую часть этого кода одной строкой:

int count = a.chars().distinct().count();

Это преобразует введенную вами строку в поток символов, получает отдельные значения и возвращает счетчик.

1 голос
/ 14 июля 2020

Я бы использовал Hashset, потому что он будет содержать отдельный набор всех символов, которые вы добавляете. Вы можете просто go просмотреть список один раз и использовать size (), чтобы получить уникальное количество символов.

...
Set<Character> characters = new HashSet<>()
for(int i=0;i<b.length();i++)
{
     characters.add(b.charAt(i));
}
if(characters.size()%2==0) {
...
1 голос
/ 14 июля 2020

Основываясь на и завершая ответ @ Guillaume ,

String a = "xiaodao";
String out = a.chars().distinct().count() % 2 == 0 ? "CHAT WITH HER!" : "IGNORE HIM!";
System.out.println(out);
1 голос
/ 14 июля 2020

Использование потоков - хороший вариант. Если вы хотите go старый простой маршрут, вы можете использовать хэш-набор. В основном, если символ находится в хеш-наборе, перейдите к следующему символу, иначе добавьте в хэш-набор и увеличьте счетчик на 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...