資料結構面試大全(3)

2021-04-21 07:51:36 字數 1769 閱讀 3823

6,按單詞反轉字串並不是簡單的字串反轉,而是按給定字串裡的單詞將字串倒轉過來,就是說字串裡面的單詞還是保持原來的順序,這裡的每個單詞用空格分開。例如:

here is www.fishksy.com.cn

經過反轉後變為:

www.fishksy.com.cn is here

如果只是簡單的將所有字串翻轉的話,可以遍歷字串,將第乙個字元和最後乙個交換,第二個和倒數第二個交換,依次迴圈。其實按照單詞反轉的話可以在第一遍遍歷的基礎上,再遍歷一遍字串,對每乙個單詞再反轉一次。這樣每個單詞又恢復了原來的順序。

char* reverse_word(const char* str)
int k=0;
while(k
}
return restr;
}
如果考慮空間和時間的優化的話,當然可以將上面**裡兩個字串交換部分改為異或實現。

例如將

char temp=restr[i];
restr[i]=restr[j];
restr[j]=temp;
改為
restr[i]^=restr[j];
restr[j]^=restr[i];
restr[i]^=restr[j];
7,字串反轉我沒有記錯的話是一道

msn的筆試題,網上無意中看到的,拿來做了一下。題目是這樣的,給定乙個字串,乙個這個字串的子串,將第乙個字串反轉,但保留子串的順序不變。例如:

輸入:第乙個字串

子串: "fishsky"

輸出:"nc/nc.moc.fishsky.www//:ptth :etis esenihc s'fishsky si siht"

一般的方法是先掃瞄一邊第乙個字串,然後用

stack

把它反轉,同時記錄下子串出現的位置。然後再掃瞄一遍把記錄下來的子串再用

stack

反轉。我用的方法是用一遍掃瞄陣列的方法。掃瞄中如果發現子串,就將子串倒過來壓入堆疊。

最後再將堆疊裡的字元彈出,這樣子串又恢復了原來的順序。源**如下:

#include
#include
#include
using namespace std;
//reverse the string 's1' except the substring 'token'.
const char* reverse(const char* s1, const char* token)
if(*ptoken == '')//contain the token
else
}
char * return_v = new char[strlen(s1)+1];
int i=0;
while(!stack1.empty())
return_v[i]='';
return return_v;
}
int main(int argc, char* argv)

面試 資料結構(3)(鍊錶)

1 除了用陣列描述線性表還可以用鍊錶描述線性表 2在鏈式描述中,線性表的元素在記憶體中的儲存位置是隨機的。每個元素都有乙個明確的指標或鏈指向線性表的下乙個元素的位置 即位址 陣列和鍊錶的區別 在陣列中,元素的位址是由數學公式決定的,而在鏈式描述中,元素的位址是隨機分布的 順序表是順序儲存,非順序訪問...

面試 資料結構

先給出定義部分和相關除錯部分 include h using namespace std struct listnode head listnode insert int v while p next null p p next p next new listnode p p next p next...

資料結構 面試

看了劍指offer發現乙個問題有好多種思路去解決,之前自己考慮的都太普遍性,應當多樣化的來思考問題 最深體會 寫出實現功能的 和寫出優異的 是兩回事!1.鍊錶的倒敘列印 1 是否可以改變鍊錶結構,可以改變就改變以後列印 2 不允許改變鍊錶結構可以直接使用迴圈,但是時間複雜度會是o n 3 使用棧來儲...