Как найти слово, в котором число различных символов минимально? Если таких слов несколько, найти первое из них.
Как это можно сделать?
задан 8 янв 2016 в 21:07
2
Я так понял, что вам нужно в заданной строке найти слово, в котором число УНИКАЛЬНЫХ символов минимально (сколько раз они повторяются неважно)? Тогда что-то типа такого (если разделитель слов — пробелы):
def f(string):
for i in string.split(' '):
if (len(set(string)) > len(set(i))):
string = i
return string
UPD
Добавил вариант на случай ввода строки в форме NFD (спасибо @jfs):
import regex
def f1(string):
def uniq(s):
return regex.findall(r'X', s, regex.U)
for i in string.split(' '):
if (len(uniq(string)) > len(uniq(i))):
string = i
return string
ответ дан 8 янв 2016 в 21:55
FlowneeeFlowneee
3,7991 золотой знак20 серебряных знаков31 бронзовый знак
5
Если символ это Unicode codepoint, то чтобы найти слово с минимальным кол-вом символов из списка words
:
word = min(words, key=lambda w: len(set(w)))
Если символ это символ, видимый пользователю (grapheme cluster):
import regex as re # pip install regex
word = min(words, key=lambda w: len(set(re.findall(r'X', w))))
Если слова в тексте разделены символами пробелов (включая новый строки и Юникодные символы), то words = text.split()
.
ответ дан 12 янв 2016 в 8:40
jfsjfs
51.8k11 золотых знаков107 серебряных знаков306 бронзовых знаков
2 / 2 / 2 Регистрация: 10.11.2012 Сообщений: 124 |
|
1 |
|
Найти слово, число разных символов в которых минимально25.08.2015, 11:51. Показов 12193. Ответов 7
Добрый день! Нужна идея (не решение!) для данной задачи. Что-то мне подсказывает что нужно использовать какой-то Map. Заранее благодарен!
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
25.08.2015, 11:51 |
Ответы с готовыми решениями: Ввести n слов с консоли. Найти слово, в котором число различных символов минимально
Строки: найти слово, в котором число различных символов максимально "Строка состоит из слов,… 7 |
2393 / 2219 / 564 Регистрация: 28.12.2010 Сообщений: 8,662 |
|
25.08.2015, 13:49 |
2 |
в каждом слове посчитать кол-во разных символов
0 |
61 / 61 / 15 Регистрация: 18.05.2015 Сообщений: 322 |
|
25.08.2015, 15:19 |
3 |
Очевидное решение: разбить функцией split исходную строку по символу ‘ ‘, затем в каждом элементе получившегося массива подсчитывать число разных символов и искать минимум (так, как это обычно делается — держать минимальное слово в какой-то переменной и сравнивать).
0 |
2 / 2 / 2 Регистрация: 10.11.2012 Сообщений: 124 |
|
27.08.2015, 11:48 [ТС] |
4 |
в каждом слове посчитать кол-во разных символов Интересует именно алгоритм сравнения символов. Берем первый символ, сравниваем со вторым, третьим и т.д. Потом второй с третьим, четвертым и т.д.?
0 |
klopik 61 / 61 / 15 Регистрация: 18.05.2015 Сообщений: 322 |
||||
27.08.2015, 20:29 |
5 |
|||
Думаю, приблизительно так
Т.е. я создаю новую строку типа StringBuffer и добавляю в нее символы из исходной строки по одному разу, после чего возвращаю длину получившейся строки.
1 |
Monty_Python 8 / 8 / 6 Регистрация: 31.07.2015 Сообщений: 39 |
||||||||
28.08.2015, 02:55 |
6 |
|||||||
РешениеНьюбии, хэшмапа с головой хватит. Кликните здесь для просмотра всего текста
1 |
Ньюбии 2 / 2 / 2 Регистрация: 10.11.2012 Сообщений: 124 |
||||
03.09.2015, 15:09 [ТС] |
7 |
|||
Ньюбии, хэшмапа с головой хватит. я пошел своим путем, но пока что-то неудачно
0 |
easybudda Модератор 11758 / 7258 / 1720 Регистрация: 25.07.2009 Сообщений: 13,274 |
||||
03.09.2015, 16:23 |
8 |
|||
Код andrew@debppc:~/workspace/java/strings$ javac LessDiffLetters.java andrew@debppc:~/workspace/java/strings$ java LessDiffLetters all any the way many more bells bells money jingle jingle jingle andrew@debppc:~/workspace/java/strings$
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
03.09.2015, 16:23 |
Помогаю со студенческими работами здесь
Найти все трехзначные натуральные числа, сумма цифр которых равна В, а само число состоит из разных цифр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 8 |
Основой html форм являются input поля, которые могу быть паролем, email-ом или любым другим типом данных. Эти элементы используются для взаимодействия с пользователем.
Однако, пользователь может ввести любое количество символов и отправить их на php обработку. А что, если он в поле Имя введет 1 символ или 1000? Давайте защитим нашу форму.
Пусть есть такой input: <input type=»text» name=»marka»>
1 способ. Самый простой метод задать минимальную и максимальную длину в поле — использование атрибутов minlength и maxlength. Иземним input так:
<input type=»text» name=»marka» minlength=»5″ maxlength=»20″>
Теперь если мы попробуем отправить форму, то браузер перехватит событие и проверит число символов введенных в этом поле. В случае, если их будет меньше 5, он выдаст предупреждение и не отправит форму. А maxlength=»20″ просто не даст пользователю ввести большее число символов, чем 20.
2 способ. Никто мне не мешает в 1 способе, открыть исходный код этой формы и удалить из input-а эти атрибуты — так я смогу легко обойти ограничения на ввод. Давайте напишем, код, который будет проверять введенное число символов пользователем и помечать поле красным, если что-то не так, а если все в порядке, то зеленым.
Проверка на минимальное число символов
$(‘[name=»marka»]’).on(«click keyup change blur», function() {
if($(this).val().length < 5) { $(this).attr(‘style’, ‘border: 1px solid red;’); } else { $(this).attr(‘style’, ‘border: 1px solid green;’); }
});
Проверка на максимальное число символов
$(‘[name=»marka»]’).on(«click keyup change blur», function() {
if($(this).val().length > 20) { $(this).attr(‘style’, ‘border: 1px solid red;’); } else { $(this).attr(‘style’, ‘border: 1px solid green;’); }
});
Одновременно, на одно и тоже поле нельзя поставить эти две проверки — только одну. Если вам нужно проверять одновременно на мин. и макс. число символов введенных пользователем в поле, то используйте такую конструкцию:
$(‘[name=»marka»]’).on(«click keyup change blur», function() {
if($(this).val().length >= 5 && $(this).val().length <= 20) { $(this).attr(‘style’, ‘border: 1px solid green;’); } else { $(this).attr(‘style’, ‘border: 1px solid red;’); }
});
При такой проверке, скрипт будет срабатывать при каждом нажатии клавиши. Если число символов будет меньше 5, поле станет красным, если от 5 до 20 — зеленым и если больше 20, то снова красным.
К сожалению, код проверки длины символов получился громоздким. В следующем материале я сделаю функцию форматирования input полей. И кстати, от злоумышленников, код не спасет — его также легко обойти, поэтому последняя проверка всегда должна идти методами PHP.
myPhone.addEventListener('keyup', function(evt){
let length = this.value.length
if (length < 9) msg.textContent = 'маловато будет!'
else if (length == 9) msg.textContent = 'норм!'
else if (length > 9 && length < 16) msg.textContent = 'э, хватит'
else if (length > 15 && length < 31) msg.textContent = 'больше не надо'
else if (length > 30) msg.textContent = 'остановись, демон!'
})
https://jsfiddle.net/5v7cdb5y/
Комментировать
Можно сделать как-то так:
<input type="text" name="phone" minlength="9" required>
Комментировать
I received the same interview question. I am a C++ candidate but I was in a position to code relatively fast in JAVA.
Java [Courtesy : Sumod Mathilakath]
import java.io.*;
import java.util.*;
class UserMainCode
{
public String GetSubString(String input1,String input2){
// Write code here...
return find(input1, input2);
}
private static boolean containsPatternChar(int[] sCount, int[] pCount) {
for(int i=0;i<256;i++) {
if(pCount[i]>sCount[i])
return false;
}
return true;
}
public static String find(String s, String p) {
if (p.length() > s.length())
return null;
int[] pCount = new int[256];
int[] sCount = new int[256];
// Time: O(p.lenght)
for(int i=0;i<p.length();i++) {
pCount[(int)(p.charAt(i))]++;
sCount[(int)(s.charAt(i))]++;
}
int i = 0, j = p.length(), min = Integer.MAX_VALUE;
String res = null;
// Time: O(s.lenght)
while (j < s.length()) {
if (containsPatternChar(sCount, pCount)) {
if ((j - i) < min) {
min = j - i;
res = s.substring(i, j);
// This is the smallest possible substring.
if(min==p.length())
break;
// Reduce the window size.
sCount[(int)(s.charAt(i))]--;
i++;
}
} else {
sCount[(int)(s.charAt(j))]++;
// Increase the window size.
j++;
}
}
System.out.println(res);
return res;
}
}
C++ [Courtesy : sundeepblue]
#include <iostream>
#include <vector>
#include <string>
#include <climits>
using namespace std;
string find_minimum_window(string s, string t) {
if(s.empty() || t.empty()) return;
int ns = s.size(), nt = t.size();
vector<int> total(256, 0);
vector<int> sofar(256, 0);
for(int i=0; i<nt; i++)
total[t[i]]++;
int L = 0, R;
int minL = 0; //gist2
int count = 0;
int min_win_len = INT_MAX;
for(R=0; R<ns; R++) { // gist0, a big for loop
if(total[s[R]] == 0) continue;
else sofar[s[R]]++;
if(sofar[s[R]] <= total[s[R]]) // gist1, <= not <
count++;
if(count == nt) { // POS1
while(true) {
char c = s[L];
if(total[c] == 0) { L++; }
else if(sofar[c] > total[c]) {
sofar[c]--;
L++;
}
else break;
}
if(R - L + 1 < min_win_len) { // this judge should be inside POS1
min_win_len = R - L + 1;
minL = L;
}
}
}
string res;
if(count == nt) // gist3, cannot forget this.
res = s.substr(minL, min_win_len); // gist4, start from "minL" not "L"
return res;
}
int main() {
string s = "abdccdedca";
cout << find_minimum_window(s, "acd");
}
Erlang [Courtesy : wardbekker]
-module(leetcode).
-export([min_window/0]).
%% Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
%% For example,
%% S = "ADOBECODEBANC"
%% T = "ABC"
%% Minimum window is "BANC".
%% Note:
%% If there is no such window in S that covers all characters in T, return the emtpy string "".
%% If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
min_window() ->
"eca" = min_window("cabeca", "cae"),
"eca" = min_window("cfabeca", "cae"),
"aec" = min_window("cabefgecdaecf", "cae"),
"cwae" = min_window("cabwefgewcwaefcf", "cae"),
"BANC" = min_window("ADOBECODEBANC", "ABC"),
ok.
min_window(T, S) ->
min_window(T, S, []).
min_window([], _T, MinWindow) ->
MinWindow;
min_window([H | Rest], T, MinWindow) ->
NewMinWindow = case lists:member(H, T) of
true ->
MinWindowFound = fullfill_window(Rest, lists:delete(H, T), [H]),
case length(MinWindow) == 0 orelse (length(MinWindow) > length(MinWindowFound)
andalso length(MinWindowFound) > 0) of
true ->
MinWindowFound;
false ->
MinWindow
end;
false ->
MinWindow
end,
min_window(Rest, T, NewMinWindow).
fullfill_window(_, [], Acc) ->
%% window completed
Acc;
fullfill_window([], _T, _Acc) ->
%% no window found
"";
fullfill_window([H | Rest], T, Acc) ->
%% completing window
case lists:member(H, T) of
true ->
fullfill_window(Rest, lists:delete(H, T), Acc ++ [H]);
false ->
fullfill_window(Rest, T, Acc ++ [H])
end.
REF:
- http://articles.leetcode.com/finding-minimum-window-in-s-which/#comment-511216
- http://www.mif.vu.lt/~valdas/ALGORITMAI/LITERATURA/Cormen/Cormen.pdf