字串是程式設計中最重要的一類資料結構,能否對字串進行靈活處理是考察乙個求職者最基本的要求,而且字串在面試中佔的比重也很大,接下來就針對字串相關的演算法進行簡要的整理和歸納。
字串相關問題包括最長公共子串、最長公共子串行、字串逆序等等。
package com.xpn.string;
public
class
rotatestring
public string rotatestring(string str,int offset)
public string reversestring(string str)
return sb.tostring();
}}
package com.xpn.string;
public
class
lcs
int lcs(string a,string b)}}
return max;
}}
改進之後,列印找到的最大公共子串,**:
package com.xpn.string;
public
class
lcs
int lcs(string a,string b)}}
stringbuilder sbuilder=new stringbuilder();
int begin=index-max;
while(index>begin)
system.err.println(sbuilder.reverse().tostring());//需要反轉
return max;
}}
package com.xpn.string;
public
class
lcs2
int lcs2(string a,string b)}}
return opt[m][n];
}}
這裡只是簡單實現了最長公共子串行的長度,如果要進一步找出對應的字元,則需要做進一步處理。
改進之後,可以找出對應的最長公共子串行,通過標記進行處理。**如下:
package com.xpn.string;
public
class
lcs2
int lcs2(string a,string b)
else else
opt[i][j]=math.max(opt[i-1][j], opt[i][j-1]);}}
}stringbuffer sbuffer=new stringbuffer();//儲存結果
for(int i=1;i<=m;i++)}}
system.out.println();
system.out.println(sbuffer.tostring());
return opt[m][n];
}}
這裡只找出了乙個,如果要找出所有的公共子串行,需要通過遞迴進一步實現。 字串 字串的旋轉
時間複雜度為o m n 空間複雜度為o 1 include include include void leftshiftone char str,int n void leftrotatestring char str,int n,int m int main 輸出 before rotate ab...
左旋轉字串(字串)
題目描述 組合語言中有一種移位指令叫做迴圈左移 rol 現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於乙個給定的字串行s,請你把其迴圈左移k位後的序列輸出。例如,字串行s abcxyzdef 要求輸出迴圈左移3位後的結果,即 xyzdefabc 是不是很簡單?ok,搞定它!思路一 pub...
字串旋轉
問題 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef前2位字元移到後面得到字串cdefab。要求時間對長度為n的字串操作的複雜度為o n 輔助記憶體為o 1 看到大多數的帖子都是進行三次旋轉 如 個人感覺這思路確實比較新穎,但是總感覺有點麻煩了,個人思路如下 include inclu...