Нужны входные данные об эффективности моей программы для поиска дубликатов в строке - PullRequest
2 голосов
/ 19 октября 2011

Я разработал Java-программу для проверки наличия в строке всех уникальных символов.Я перечисляю это вниз.Я буду признателен, если я получу информацию об эффективности этой программы, а также любые исправления, необходимые для улучшения этой программы.Заранее спасибо.

package com.string.duplicatechars;

import java.util.HashMap;
import java.util.Map;

public class CheckForDuplicateChars {

        /**
         * @param args
         */
        public static void main(String[] args) {
                String sampleString = "abcdabxyz";
                boolean allUniqueCharacters = allUniqueCharacters(sampleString);
                System.out.println("Are all characters unique: "+allUniqueCharacters);
        }

        public static boolean allUniqueCharacters(String sampleString) {
                boolean allUniquCharacters = true;
                char[] charArrForString = sampleString.toCharArray();
                Map<Character, Boolean> resultHashMap = new HashMap<Character, Boolean>();

                for(char ch: charArrForString){
                        Boolean isAlreadyPresent = (Boolean)resultHashMap.put(new Character(ch), new Boolean(true));

                        if(isAlreadyPresent != null){
                                if(isAlreadyPresent.booleanValue() == true) {
                                        System.out.println("Got repeated character: "+ch);
                                        allUniquCharacters = false;
                                }
                        } else {
                                System.out.println("Character "+ch+ " is being iserted first time");
                        }
                }

                return allUniquCharacters;
        }
}

Ответы [ 4 ]

2 голосов
/ 19 октября 2011

Я бы вместо этого использовал Set<Character>. Когда вы пытаетесь набрать add символа для набора, он вернет false, если набор уже содержит этого символа.

for(char c: yourCharArray){
    if(!set.add(c)){
        return false;
    }
}
0 голосов
/ 20 октября 2011

Я думаю, Set и его варианты будут дорогостоящими по сравнению с простым массивом.Я могу ошибаться.

В зависимости от ожидаемого диапазона символов, вы можете создать один или несколько массивов int, инициализировать все индексы равными 0 и установить их в 1 для каждого найденного символа, используя Character.getNumericValue().У вас будет дублированный символ, если вы встретите элемент массива, который уже равен 1.

Под одним или несколькими массивами я имею в виду, что если ожидается весь диапазон int, вы не сможете создать такой большой массив, но выможет иметь два массива, один для положительных и другой для отрицательных значений.

0 голосов
/ 19 октября 2011

Как насчет:

char[] charArrForString = sampleString.toCharArray();
HashSet s = new HashSet(Arrays.asList(charArrForString));

return (s.size() == charArrForString.length);
0 голосов
/ 19 октября 2011

Вы можете использовать HashSet для хранения обнаруженных символов и вызвать contains(..), чтобы проверить, встречался ли уже персонаж.

...