演算法整理 字串(LCS,旋轉字串)

2021-06-29 15:54:36 字數 1561 閱讀 4632

字串是程式設計中最重要的一類資料結構,能否對字串進行靈活處理是考察乙個求職者最基本的要求,而且字串在面試中佔的比重也很大,接下來就針對字串相關的演算法進行簡要的整理和歸納。

字串相關問題包括最長公共子串、最長公共子串行、字串逆序等等。

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...