字串操作 面試題總結

2021-07-04 14:14:22 字數 3107 閱讀 4471

[cpp]view plain

copy

print?

#include 

#include 

#include 

#include 

#include 

using

namespace

std;  

/*\題目:輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。

句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。

例如輸入「i am a student.」,則輸出「student. a am i」。

使用: reverse_iterator */

[cpp]view plain

copy

print?

*/  

void

reverseword()  

/*   /*

例如abcaccd 輸出b

解題思路:利用hash思想,字元一共256個,則建立乙個大小為256的數字

*/[cpp]view plain

copy

print?

intgetfirstnorepeatch()  

}  return

0;  

}  

/*題目不難,但是考察程式設計習慣,比如判斷正負號,是否為數字字元,是否越界等

函式返回值指示是否正確轉化,sum代表轉化後的值

*/[cpp]view plain

copy

print?

bool

conversetonumber(

const

char

*pstr, 

int&sum)  

else

while

(*pchar != 

'\0'

)    

}  //the char is not a digit,input error

else

}  if(*pchar == 

'\0'

)    

return

isvalid;  

}  

/*定義字串的左旋轉操作:把字串前面的若干個字元移動到字串的尾部。如把字串abcdef左旋轉2位得到字串cdefab。

請實現字串左旋轉的函式。要求時間對長度為n的字串操作的複雜度為o(n),輔助記憶體為o(1)。

*//*

思路1,將字串看成兩部分xy,目標是yx,我們利用將x y 分別翻轉來得到結果 (xt yt)t=yx.

*/[cpp]view plain

copy

print?

//reverse the word

void

reverse(

char

*pstart,

char

*pend)  

}  }  char

* leftconversestr(

char

*pstr,

intm)  

}  return

pstr;  

}  

/*輸入they are students.」和」aeiou」,則刪除之後的第乙個字串變成」thy r stdnts.」。

遍歷源字串,對每個字元在第二個字串中查詢是否存在,存在則刪除。首先我們對第一部分進行優化,由於刪除乙個字元時,後面的都要

往前移,這樣刪除乙個字元需要o(n),太耗時了,乙個改進的做法是維護兩個指標 pfast pslow,當當前字元是需要刪除的字元時,pfast ++

,是不需要刪除的字元時,兩個都++,這樣我們最後得到了pslow就是結果,對於查詢部分,利用hash,時間複雜度o(1).

*/[cpp]view plain

copy

print?

char

* delchar(

char

*psource,

char

*pdel)  

char

*pfast=psource,*pslow=psource;  

while

(*pfast != 

'\0'

)    

pfast++;  

}  *pslow='\0'

;  return

psource;  

}  

/*題目:輸入乙個字串,輸出該字串中對稱的子字串的最大長度。

比如輸入字串「google」,由於該字串裡最長的對稱子字串是「goog」,因此輸出4。

解題思路:判斷乙個字串是否對稱相信都會做,從兩邊向中間開始逐一判斷,如果採用這個思路,我們需要列舉出所有可能的子串

即n^2個,然後對每乙個子串判斷是否對稱,這樣時間複雜度o(n^3).因為存在重複判斷,所以時間負責度會這麼高,我們換一種思路

從中間像兩端判斷,這樣可以降低複雜度,為o(n^2)

*/[cpp]view plain

copy

print?

intgetlongestsymmetricallength(

char

*pstr)  

tmp=pright-pleft-1;  

if(tmp>len)  

len=tmp;  

pleft=pchar;  

pright=pchar+1;  

while

(pleft >=pstr && *pright!=

'\0'

&& (*pleft==*pright))  

//even length

tmp=pright-pleft-1;  

if(tmp>len)  

len=tmp;  

pchar++;  

}  }  

return

len;  

}  int

main()    

字串高頻面試題。

一 題目 把乙個01 只包含0和1的串 串進行排序。可以交換任意兩個位置,求最少交換的次數。方法 仿造快速排序裡面的partition的過程。最左邊的0和1是沒有意義的,從左到右掃到第乙個1,從右到左掃到第乙個0,然後交換,然後繼續掃下去,就ok啦。include include define ma...

面試題 分割字串

package interview.string public class splitdemo 程式設計 編寫乙個擷取字串的函式,輸入為乙個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截半個,如 我abc 4,應該截為 我ab 輸入 我abc漢def 6,應該輸出為 我abc 而不是...

字串相關面試題

面試題目 字串專題 c字串處理函式彙總實現 面試大多會用到 一道面試題 從乙個字串中找出第乙個不重複字元 程式設計師面試題精選100題 36 在字串中刪除特定的字元 一 整數與字串之間的相互轉換 字串處理函式彙總實現 面試大多會用到 轉換字串 插入字元個數 www.firnow.com 常見c語言面...