问题

已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {“bed”, “dog”, “dear”, “eye”},按照字母顺序排序并打印,结果应为:dear, dog, eye, bed。

说明

本问题在网上比较常见,但这里尝试用另外一个思路,并且用python来写,与众多用c++的有所不同,且似乎短小了不少。自己感觉比网上参考到的更容易理解。 欢迎指点。

解决(python)

  1. 1. #! /usr/bin/env python
  2. 2. #coding:utf-8
  3. 3. 4. def char_to_number(by_list,char): #根据排序依据字母顺序,给另外一个字母编号
  4. 5. try:
  5. 6. return by_list.index(char)
  6. 7. except:
  7. 8. return 1000
  8. 9. 10. def sort_by_list(by_list,input_list):
  9. 11. 12. result={}
  10. 13. for word in input_list:
  11. 14. number_list = [char_to_number(by_list,word[i]) for i in range(len(word))]
  12. 15. 16. #得到形如:{"good":[2,3,3,1],"book":[1,3,3,0]}样式的结果
  13. 17. result[word] = number_list
  14. 18. 19. #将得到的result生成[(key1,value1),(key2,value2),...]列表,按照value值排序,取出排序结果中的key即v[0],生产列表。
  15. 20. return [v[0] for v in sorted(result.items(),lambda x,y:cmp(x[1],y[1]))]
  16. 21. 22. if __name__=="__main__":
  17. 23. word = ["bed","dog","dear","eye"]
  18. 24. by_string = ['d','g','e','c','f','b','o','a']
  19. 25. print "the word list is:"
  20. 26. print word
  21. 27. print "\nwill sorted by:"
  22. 28. print by_string
  23. 29. print "\nthe result is:"
  24. 30. print sort_by_list(by_string,word)

解法 (racket 5.2.1)

对语言的掌握还不熟练,所以暂未考虑算法效率

  1. 1. #lang racket
  2. 2. 3. ; 定义一个函数 filter-by-1st-char
  3. 4. ; 输入一个字符 a-ch 和一个字符串 a-str
  4. 5. ; 如果 a-ch 与 a-str 的第一个字符相同,
  5. 6. ; 则以列表方式输出 a-str, 否则输出空列表 '()
  6. 7. (define (filter-by-1st-char a-ch a-str)
  7. 8. (if (char=? a-ch (string-ref a-str 0))
  8. 9. (list a-word) '()))
  9. 10. 11. ; 定义一个函数 sort-words-by-char-list
  10. 12. ; 它接受以字符串形式输入的一个字符序列 char-list,
  11. 13. ; 和以字符串列表形式输入的一个字符串序列 word-list
  12. 14. ; 输出一个列表,其所有列表项即 word-list 中的所有字符串
  13. 15. ; 并且将根据每个字符串的首字母,依照 char-list 所提供的顺序排序
  14. 16. ; 而并非按一般英文词典的 a-z 顺序排序
  15. 17. (define (sort-words-by-char-list char-list word-list)
  16. 18. (let
  17. 19. ([sorted-word-list '()]) ; 定义一个空列表用于存储排序后的 word
  18. 20. (for ([ch char-list])
  19. 21. (for ([wd word-list])
  20. 22. (set! sorted-word-list
  21. 23. (append sorted-word-list ; 把符合条件的单词放进结果列表
  22. 24. (filter-by-1st-char ch wd)))))
  23. 25. sorted-word-list))
  24. 26. 27. ; 函数调用,正常运行时,应该输出 (dear dog eye bed)
  25. 28. (displayln
  26. 29. (sort-words-by-char-list "dgecfboa" '("dear" "dog" "eye" "bed")))

整理人:豆包AI助手