簡體   English   中英

在C#的字符串列表中搜索混雜的字符串

[英]searching a jumbled string in a list of strings in C#

我正在使用.NET2.0
我想在字符串列表中搜索混亂的字符串

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

// do stuff 

我希望結果是“ pascal”,如果找不到,也要給“對不起,找不到”

更新:

  • 這不是功課
  • 列表大約有1000個單詞,因此很難對每個單詞進行排序

好吧,一種方法是:

  1. 創建數組的副本
  2. 按字母順序對每個字符串排序
  3. 按字母順序對搜索詞進行排序
  4. 在復制的數組中找到與排序的搜索詞匹配的元素的索引
  5. 如果它們匹配,則從原始(未排序)數組中返回相應的元素。
  6. 如果不匹配,請繼續搜索。

值得注意的是,兩個單詞可能具有相同的字符內容,但不相等。 例如,“ neo”和“ one”具有相同的字符,但顯然不是相同的詞。

更新資料

正如Paul所建議的,如果僅對與搜索詞具有相同字符數的字符串進行排序,這會更好。

聞起來像作業

對findText中的字符進行排序。 排序wordList中每個單詞的字符並創建一個新列表。 將排序后的findText與每個排序后的單詞進行比較。 如果找到匹配項,請在原始wordList中的相同索引處查找該單詞。

(您可能在比較之前就可以對wordList中的單詞進行排序)

編輯:如果您真的不想對它們進行排序,

計算findText中每個字母有多少個。

  • 遍歷wordList
  • 對於每個字,
    • 如果它與wordList的長度相同
    • 復制頻率表以查找文本
    • 遍歷wordList中的單詞
    • 對於找到的每個字符,如果不為零,則減少頻率表中的數字。
    • 如果您匹配所有字母並以全零結尾,則表示匹配

一種方法可能是對每個字符串和比較字符串中的字符進行排序,然后以這種方式進行比較。

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

比較排序后的字符串是否相等,如果沒有匹配項,則返回找不到。

  1. 列出那些長度等於給定字符串長度的字符串。
  2. 從這些過濾列表中,檢查每個字符串與給定字符串的ASCII值之和。
  3. 現在,第三個和最后一個匹配已過濾列表中的字符,您將得到混亂的字符串。

1.過濾數組列表,例如搜索字符串長度等於數組列表元素

2.比較數組列表元素中的每個字符。 如果找到增量計數並刪除該字符數組列表元素。

3.如果count等於搜索字符串而不是打印數組元素,否則找不到元素

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM