DS 鍊錶 字串演算法設計

2021-09-28 20:51:41 字數 2746 閱讀 3373

第五周上機課開始限時模式

規定了鍊錶用struct ,之前沒有接觸過struct的函式所以摸索了好久…?不過好歹是在課上寫出來了第一題

第二題回來思考了一下也寫出來了,應該是o(n)複雜度~

刪除鍊錶中的重複元素並排序

給定乙個排序鍊錶,刪除所有含有重複數字的節點,只保留原始鍊錶中 沒有重複出現 的數字。

鍊錶定義統一: (struct)

definition for singly-linked list. struct listnode

};示例 1:

輸入:3 4 3 4 1 2 5

輸出:1 2 5

示例 2:

輸入:3 1 1 1 2

輸出:2 3

tips: 使用鍊錶結構進行排序去重,而不是使用陣列等其他容器。

#include

using namespace std;

struct listnode };

listnode *

del(listnode *p,

int n)

,i=0

;listnode *q=p;

for(

;i)//記錄各數字出現個數

q=p;

while

(q&&num[q->val]!=1

)if(q==

null

)return

null

;//全部是重複元素

listnode *pp=q->next,

*qq=

null

;while

(pp)

//保留的元素

else

//刪除的元素

}

q=p;

int flag=1;

//開始排序

while

(flag)

else}}

return p;

}int

main()

//初始化鍊錶

p=&h; cout<<

"原鍊錶:"

null

) cout<<

"鍊錶為空"

(p!=

null

) cout

cout<<

"刪除重複元素並排序後鍊錶:"

del(

&h,n);if

(p==

null

) cout<<

"鍊錶為空"

(p!=

null

) cout<}

其實思路很快就想出來了(類似kmp,用輔助陣列)

主要糾結在鍊錶的輸入輸出(???)

要注意new的用法:listnode * q=new listnode(temp);

以及鍊錶為空的輸出情況

刪除元素思路:用陣列記錄各數字的出現此處,只保留下次數為1的元素

排序元素思路:冒泡法

最長回文子串

在字串中找到它們每乙個的最長回文子串。

輸入輸出:

先輸入 n,表示字串的個數。

然後輸入 n 個字串。 輸出依次輸出每個字串的最長回文子串。

樣例

輸入:3

abababa aaaabaa acacdas

輸出:754

tips:統一使用 string 進行字串的儲存。

bonus:

1.o(nnn) 60

2.o(n*n) 85

3.o(n) 100

#include

#include

using namespace std;

char

*findlast

(string s,

char k,

char

*l1)

intpalindrome

(string s)

//無重複字母

f2=f1+

1;l2=

findlast

(s,*f2,l1-1)

;//向後順移尋找回文子串

if(l1==l2+1)

//奇偶回文子串結束情況

f1++

;l1--;}

else}if

(num>max) max=num;

}return max;

}int

main()

//初始化字串

for(i=

0;i) cout<<

"第"<1<<

"個字串的最長回文子串:"

<<

palindrome

(*a[i]

)

}

未知個數字串輸入,定義乙個string * p,p=new string;

思路:保證f1不回溯,找到f1對應字母的最末位置l1,再以f2,l2向里檢查是否回文字串,記錄num和max

要注意判斷奇偶數結束的情況

DS 字串操作

本週資料結構講了字串 作業不是很難,只寫了一中午 主要是利用製表的思路減少遍歷次數 要讓演算法有記憶?刪除s中所有ch 編寫效率盡量高的函式刪除s中所有值為ch的字元 include include using namespace std void del char s,char ch i 0 j ...

字串鍊錶設計

標頭檔案 ifndef link h define link h typedef struct stringnode stringnode 1.向鍊錶尾部插入乙個元素 int tailinsertnode stringnode pnode,char ptaildata 2.遍歷 void print...

DS 字串迴圈問題

題目描述 給定乙個字串,求需要新增至少幾個字元到字串末尾才能使得整個字串串由某乙個不為本身的子串迴圈構成?如 abca 新增 bc 後構成 abcabc 其由子串 abc 迴圈構成 也可以新增 abca 後構成 abcaabca 其由子串 abca 迴圈構成,相比之下 bc 只有2個字元,新增的字元...