按照給定的字母序列對字元陣列排序

2021-10-08 21:15:15 字數 1504 閱讀 7922

己知字母序列[d, g, e, c, f, b, o, a],請實現乙個方法,要求對輸入的一組字串 input=[「bed」,「dog「,「dear」,「eye"]按照字母順序排序井列印。本例的輸出順序為: dear,dog,eye, bed。

這道題本質上還是考察對字串排序的理解,唯一不同的是, 改變了 比較字串大小的 規則,因此這道題的關鍵是如何利用給定的規則比較兩個字串的大小,只要實現了兩個字 符串的比較,那麼利用任何一種排序方法都可以 。 下面重點介紹字串比較的方法。

本題的主要思路為 : 為給定的字母序列建立乙個可以進行大小比較的序列,在這裡我們 採用 map 資料結構來實現 map 的鍵為給定的字母序列,其值為從 0 開始依次遞增的整數,對 於沒在字母序列中的字母,對應的值統一按-1 來處理。這樣在比較字串中的字元時 ,不是 直接比較字元的大小,而是比較字元在 map 中對應的整數值的大小。以「bed」、「dog」為例, [d, g, e, c, f, b, o, a]構建的 map 為 char_to_int[ 'd ']=0, char to_int[ 』 g』]=l, char_to_int[ 'e』]=2, char_to_int[『c』]=3, char_to_int[γ]=4, char_to_int[『b』]=5, char_to_int['o』]=6, char_to int [『a』]=7。 在比較「 bed」與「 dog」的時候,由於 char_to_int[ 『b 』]=5, char_to_int[ 『d』]=0,顯然 5>0, 因此,』 b』 > 'd』,所以,「 bed」>「 dog」。

下面以插入排序為例,給出實現**:

def compare(str1,str2,char_to_int):

len1=len(str1)

len2=len(str2)

i=0j=0

while ichar_to_int[list(str2)[j]]:

return 1

else:

i+=1

j+=1

if i==len1 and j==len2:

return 0

elif i==len1:

return -1

else:

return 1

def insertsort(s,char_to_int):

lens=len(s)

i=1while i=0:

if compare(temp,s[j],char_to_int)==-1:

s[j+1]=s[j]

else:

break

j-=1

s[j+1]=temp

i+=1

if __name__=='__main__':

s=['bed','dog','dear','eye']

sequence='dgecfboa'

lens=len(sequence)

char_to_int=dict()

i=0while i輸出:

dear

dogeye

bed

給定字元陣列,判斷字母出現的次數

給定字元陣列元素 思路 將字母與ascii表聯絡起來 定義方法printcount,無返回值,引數為字元陣列public static void printcount int ch 1.定義乙個int型別的陣列,長度為26,對應26個英文本組。用來記錄每個字母出現的次數 int count new ...

運用冒泡法結合陣列,講給定的資料按照降序排列出來

我的程式 01.02.程式的版權和版本宣告部分 05.檔名稱 test.cpp 06.作 者 王魯峰 07.完成日期 2013 年12月2日 08.版 本 號 v1.0 09.對任務及求解方法的描述部分 10.輸入描述 無 11.問題描述 運用冒泡法結合陣列,講給定的資料按照降序排列出來 12.程式...

字串去重並按照數字在前字母在後的順序排序字串

把下面的字串去重,並去除掉特殊字元按照數字在前字母在後的順序排序字串 如下 1233fddfd 3434fdsaff 454545 4545444rfdsfds 545gdsgs 方法一 var o 1233fddfd 3434fdsaff 454545 4545444rfdsfds 545gdsg...