У меня есть набор строк, и мне нужно знать первый индекс, где все они отличаются. Я могу думать о двух способов сделать это: (следующий псевдокод находится недалеко от верхней части моей головы, и может быть в значительной степени ошибка нагруженные)Алгоритм для поиска первого индекса, где строки различны?
Первый способ:
var minLength = [go through all strings finding min length];
var set = new set()
for(i=0;i<minlength;i++)
{
for(str in strings)
{
var substring = str.substring(0,i);
if(set.contains(substring))
break; // not all different yet, increment i
set.add(substring)
}
set.clear(); // prepare for next length of substring
}
Это меня поражает, как валовой из-за использования установленной структуры данных, где, похоже, не требуется.
Второй способ:
var minLength = [go through all strings finding min length];
strings.sort();
for(i=0;i<minlength;i++)
{
boolean done = true;
char last = null;
for(str in strings)
{
char c = str[i];
if(c == last)
{
// not all different yet, increment i
done = false;
break;
}
last = c;
}
if(done)
return i;
}
Но это раздражает меня, что я должен запустить первый сорт, так как алгоритм сортировки, по самой своей природе, имеет доступ к информации, которую я ищу.
Несомненно, должен быть более эффективный способ, чем то, что я перечислил выше. В конце концов, я хотел бы абстрагировать его на любой тип массива, но это будет тривиально, и его проще рассматривать как проблему с строкой.
Любая помощь?
** ОБНОВЛЕНИЕ: Я, по-видимому, не очень хорошо себя объяснил. Если мои строки [«яблоко», «банан», «огурец», «банковское дело»), я хочу, чтобы функция вернула 3, потому что были две строки («банан» и «банковский»), которые соответствовали индексу 0, 1 и 2, поэтому 3 - это первый индекс, где они все уникально.
Как Даниил упомянуто ниже, лучший способ заявить свои потребности в том, что: «Я хочу, чтобы найти индекс, где я вызов подстроки (0, я) на все мои строках приведу все уникальные значения.» **
Это я, или вторая программа находит первый индекс, в котором каждая строка имеет уникальный символ, в то время как первый ищет первый индекс i в то время как подстрока (0, i) уникальна для каждой строки? – Stephan202
Очень непонятно, что вы подразумеваете под «первым индексом, где все они отличаются» для набора строк. Не могли бы вы прояснить, что это значит и что вы пытаетесь найти? Кроме того, некоторая информация о том, какой язык вы используете, будет иметь решающее значение, поскольку существует множество различных способов решения такого рода вещей в зависимости от языка. –
Рассмотрите {111, 123, 223}. Затем первая программа находит индекс 1, а вторая не находит индекса. – Stephan202