回覆列表
  • 1 # phesk5486

    得到字串m1,m2後,有一個為空則子列為空。如果都不為空,開始下面的步驟。求得兩列的長度分別為n1,n2。動態生n2行n1列矩陣(二維陣列)。取m2中每個元素(記位置為i)與m1中元素(記位置為j)逐個比較,如果相等則為矩陣中相應行列座標的元素賦值為1,否則為0(可用迴圈巢狀完成)。比如m1(abc0cbad) m2(cba1abc)兩串的話,可以得到如圖所示矩陣。然後,不難看出,要進行如下步驟。定義max,用來記錄最大子列中元素個數。定義陣列l[n2],用來記錄最大子列的首字元地址(因為可能有不同最大子列,故用陣列,而不是單個變數)。判斷矩陣中每一個元素,是否為1,如果是則記下此時行地址到l陣列,然後判斷相對於這個元素的下一行下一列的元素是否為1,如果是則繼續判斷,一直到為0。記下此次判斷(即一個while迴圈)中“1”的個數n,存入變數max。 對於矩陣中的每一個元素都這麼判斷,如果判斷中n的值大於max那麼把n付給max,同時把這個子列的首地址付給l[0],l[0]後面的元素全賦值為-1。如果,某次判斷得到的n與max相同,即有相同最大子列,那麼把它的首地址存入l陣列的下一個位置。 當這個矩陣的每一個元素都判斷完畢後,會得到max,和陣列l,然後用迴圈做如下輸出過程: 依次以l陣列中的每個元素為首地址,輸出m2字串中以相應序號開頭的max個字元,那麼完成所有最大子列的輸出。昨天失眠了,一直到今天凌晨3點多,腦袋渾渾噩噩的,本想幫你敲程式碼,可是腦力不支了,估計敲出來也亂,還有問題的話,再討論452032545

  • 中秋節和大豐收的關聯?
  • 輸血後多久能做舒普深皮試?