Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
1

Найти первый уникальный символ в строке любой длины наиболее оптимальным образом

21.12.2013, 04:01. Показов 2386. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Какой из предложенных вариантов решения на ваш взгляд является более оптимальным. Есть ли более оптимальное решение, чем мое?

Вариант 1:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class Strings {
 
    private final static String str = "aaaxbbbzcccy";
 
    public static void main(String[] args) {
 
        byte[] bytes = str.getBytes();
 
        // 'a' => counter[(int)'a' - 97] == counter[0]
        // 'b' => counter[(int)'b' - 97] == counter[1] and so on...
        byte[] counter = new byte[26];
        boolean found = false;
        
        // Count characters
        for (int i = 0; i < bytes.length; i++) {
            counter[bytes[i] - 97]++;
        }
 
        // Iterate through the characters in the present string
        // Stop when the first characted with counter equals 1 found
        for (int i = 0; i < bytes.length; i++) {
            if (counter[bytes[i] - 97] == 1) {
                System.out.println((char) bytes[i] + ", pos: " + i);
                found = true;
                break;
            }
        }
        
        if (!found) {
            System.out.println("Unique letters not found");
        }
    }
 
}


Вариант 2:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class Strings {
 
    private final static String str = "abczabcyabcabcx";
 
    public static void main(String[] args) {
 
        byte[] bytes = str.getBytes();
 
        // 'a' => counter[(int)'a' - 97] == counter[0]
        // 'b' => counter[(int)'b' - 97] == counter[1] and so on...
        byte[] counter = new byte[26];
        int[] pos = new int[26];
 
        for (int i = 0; i < bytes.length; i++) {
            // remember first position of each character
            if (counter[bytes[i] - 97] == 0) {
                pos[bytes[i] - 97] = i; 
            }
            // count characters
            counter[bytes[i] - 97]++;
        }
 
        int minPos = Integer.MAX_VALUE;
        char ch = ' ';
 
        for (int i = 0; i < counter.length; i++) {
            // if character unique (counter[i] == 1) search min position
            if (counter[i] == 1 && pos[i] < minPos) {
                minPos = pos[i];
                ch = (char) (i + 97);
            }
        }
        
        if (minPos < Integer.MAX_VALUE) {
            System.out.println(ch + "(" + minPos + ")");
        } else {
            System.out.println("There are no unique letters");
        }
 
    }
 
}


Второй вариант, как мне кажется, работает быстрее на очень больших строках и в случае, если уникальный символ попадется не сразу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2013, 04:01
Ответы с готовыми решениями:

В тексте в каждой строке осуществить перестановку символов таким образом, чтобы. первый символ стал последним, второй предпоследним и т.д
Срочно!! Помогите написать код программы, завтра сдавать. . В тексте в каждой строке осуществить...

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

Найти в строке первый символ, не входящий в другую заданную строку
Написать программу, которая находит в предложении первый символ, не входящий в другой заданный...

Найти первый символ в строке, являющийся буквой латинского алфавита
Здравствуйте! Обращаюсь к вам с мольбой:cry::спасите меня!!! (на языке Си- )найти первый символ в...

0
21.12.2013, 04:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2013, 04:01
Помогаю со студенческими работами здесь

Найти первый символ из первой строки, которого нет во второй строке
Дано: Две строки типа char. Задание: Найти первый символ из первой строки, которого нет во...

Строка: Как найти в строке первый символ, который входит во другую заданную строку?
Как найти в строке первый символ, который входит во другую заданную строку используя указатели и...

Из строк, которые содержат символ '1' или '2', удалить первый встречающийся в строке символ, равный латинской букве 'a'
Дана матрица размером 4×3, элементами которой являются строки. Необходимо в системе Турбо-Паскаль...

Выполнить замену всех символов в строке на первый отдельный символ, а всех пробелов в строке на второй отдельный символ
Задана строка текста длинной не менее двадцати символов и заданы два отдельных символа.Выполнить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru