劍指Offer 面試題 字串

2021-09-24 05:14:27 字數 4079 閱讀 7641

思路:

js

function replacespace(str)

c++

#include #include /*length 為字元陣列str的總容量,大於或等於字串str的實際長度*/

void replaceblank(char str, int length)

/*newlength 為把空格替換成'%20'之後的長度*/

int newlength = originallength + numberofblank * 2;

if(newlength > length)

return;

int indexoforiginal = originallength;

int indexofnew = newlength;

while(indexoforiginal >= 0 && indexofnew > indexoforiginal)

else

-- indexoforiginal;}}

題目描述:請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100","5e2","-123","3.1416"和"-1e-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

思路:

#include bool scanunsignedinteger(const char** str);

bool scaninteger(const char** str);

// 數字的格式可以用a[.[b]][e|ec]或者.b[e|ec]表示,其中a和c都是

// 整數(可以有正負號,也可以沒有),而b是乙個無符號整數

bool isnumeric(const char* str)

// 如果出現'e'或者'e',接下來跟著的是數字的指數部分

if(*str == 'e' || *str == 'e')

return numeric && *str == '\0';

}bool scanunsignedinteger(const char** str)

// 整數的格式可以用[+|-]b表示, 其中b為無符號整數

bool scaninteger(const char** str)

題目描述:輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。

思路:

#include void permutation(char* pstr, char* pbegin);

void permutation(char* pstr)

void permutation(char* pstr, char* pbegin)

else}}

題目描述:給定乙個數字,我們按照如下規則把它翻譯成字串:0翻譯成『a』,1翻譯成『b』,......,11翻譯成『l』,......,25翻譯成『z』。乙個數字可能有多個翻譯。例如,12258有5種不同的翻譯,分別是「bccfi」,「bwfi」,「bczi」,「mcfi」和「mzi」。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。

思路:

#include #include using namespace std;

int gettranslationcount(const string& number);

int gettranslationcount(int number)

int gettranslationcount(const string& number)

}counts[i] = count;

}count = counts[0];

delete counts;

return count;

}

題目描述:輸出子字串的長度。例如,在字串「arabcacfr」中,最長的不含重複字元的子字串是「acfr」,長度為4。

思路:

// 動態規劃

int longestsubstringwithoutduplication_2(const std::string& str)

position[str[i] - 'a'] = i;

}if(curlength > maxlength)

maxlength = curlength;

delete position;

return maxlength;

}

題目一:字串中第乙個只出現一次的字元題目描述:如輸入「abaccdeff」,則輸出『b』。

思路:雜湊表

#include #include char firstnotrepeatingchar(const char* pstring)

return '\0';

}

題目二:字元流中第乙個只出現一次的字元題目描述:請實現乙個函式用來找出字元流中第乙個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第乙個只出現一次的字元是"g"。當從該字元流中讀出前六個字元「google"時,第乙個只出現一次的字元是"l"。

思路:雜湊表

#include #include #include using namespace std;

class charstatistics

void insert(char ch)

}return ch;

}private:

// occurrence[i]: a character with ascii value i;

// occurrence[i] = -1: the character has not found;

// occurrence[i] = -2: the character has been found for mutlple times

// occurrence[i] >= 0: the character has been found only once

int occurrence[256];

int index;

};

題目一:翻轉單詞順序題目描述:牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,「student. a am i」。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是「i am a student.」。cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?

思路:

#include #include "..\utilities\stringutil.h"

#include char* reversesentence(char *pdata)

else if(*pend == ' ' || *pend == '\0')

else

pend ++;

}return pdata;

}void reverse(char *pbegin, char *pend)

}

題目二:左旋轉字串題目描述:組合語言中有一種移位指令叫做迴圈左移(rol),現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於乙個給定的字串行s,請你把其迴圈左移k位後的序列輸出。例如,字串行s=」abcxyzdef」,要求輸出迴圈左移3位後的結果,即「xyzdefabc」。是不是很簡單?ok,搞定它!

思路:

#include #include "..\utilities\stringutil.h"

#include char* leftrotatestring(char* pstr, int n)

}return pstr;

}

end

面試題 劍指offer 字串的排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。a 把字串分為兩部分 第一部分是第乙個字元,第二部分是第乙個字元以後...

劍指offer 面試題58 翻轉字串

牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am a student....

面試題 字串翻轉

使用 c c 編寫函式,實現字串反轉,要求不使用任何系統函式,且時間複雜度最小,函式原型 char reverse str char str 使用c c 編寫函式,實現字串反轉,要求不使用任何系統函式,且時間複雜度最小,函式原型 char reverse str char str include i...