поиск беспорядочной строки в списке строк в C # - PullRequest
0 голосов
/ 24 ноября 2010

Я использую .NET2.0
Я хочу найти перемешанную строку в списке строк

string[] wordList = new string[] { "java", "csharp", "fortran", "cobol", "pascal", "perl", "flash" };
string findText = "spclaa"; 

// do stuff 

Я хочу, чтобы результат был "Паскаль" также, если не найдено, дайте "извините, не найден" Изменено:

  • это не домашняя работа
  • список содержит около 1000 слов, поэтому сортировать каждое слово нелегко

Ответы [ 5 ]

4 голосов
/ 24 ноября 2010

Ну, одним из способов будет:

  1. Создать копию массива
  2. Сортировка каждой строки по алфавиту
  3. Сортировка поиска по алфавиту
  4. Найти индекс элемента в скопированном массиве, который соответствует отсортированному поисковому запросу
  5. Если они совпадают, вернуть соответствующий элемент из исходного (несортированного) массива.
  6. Если они не совпадают, продолжайте поиск.

Стоит отметить, что возможно, что два слова будут иметь одинаковое символьное содержание и все же не будут одинаковыми. Например, «neo» и «one» имеют одинаковые символы, но явно не одно и то же слово.

Обновление

Как предположил Пол, это будет работать лучше, если вы сортируете только строки, содержащие столько же символов, сколько и поисковый запрос.

2 голосов
/ 24 ноября 2010

Пахнет как домашняя работа

Сортировка символов в findText.Сортируйте символы для каждого слова в wordList и создайте новый список.Сравните отсортированный текст поиска с каждым отсортированным словом.Если вы нашли совпадение, найдите слово с тем же индексом в исходном списке слов.

(возможно, вы могли бы отсортировать слово из списка слов перед тем, как сравнивать его)

РЕДАКТИРОВАТЬ: Если вына самом деле не хочу их сортировать,

Подсчитайте, сколько каждой буквы содержится в findText.

  • Итерация по wordList
  • Для каждого слова
    • , если его длина равна wordList
    • , скопировать таблицу частот для findtext
    • итерация по слову из wordList
    • Для каждого найденного символа уменьшите число в таблице частот, если не ноль.
    • Если вы сопоставите все буквы и в итоге получите все нули, которые выесть матч
1 голос
/ 24 ноября 2010

Одним из методов может быть сортировка символов в каждой строке и строке сравнения и сравнение их таким образом.

java becomes aajv
csharp becomes achprs
pascal becomes aaclps
scplaa becomes aaclps

Сравните отсортированные строки на равенство и возврат не найден, если нет совпадений.

0 голосов
/ 28 апреля 2014
  1. Перечислите те строки, длина которых равна длине данной строки.
  2. Из этого отфильтрованного списка проверьте сумму значений ASCII каждой строки с данной строкой.
  3. третийи финал теперь соответствует символам из отфильтрованного списка, вы получите перемешанную строку.
0 голосов
/ 24 ноября 2010

1.Фильтрировать список массивов, например, длину строки поиска, равную элементу списка массивов

2.сравнить каждый символ в элементе списка массива. Если вы нашли счетчик приращений и удалили этот элемент списка массивов символов.

3.Если число равно строке поиска, чем элемент массива печати, в противном случае элемент не найден

...