最長公共子串(lcs)
//輸出a和b最長公共子串的長度, 並列印結果
#include
using
namespace std;
const
int maxn =
1005
;int d[maxn]
[maxn]
;char a[maxn]
, b[maxn]
;int la, lb;
intmain()
int len = d[la]
[lb]
;printf
("%d\n"
, len)
; stack<
char
> ans;
int i = la, j = lb;
while
(d[i]
[j])
}while
(!ans.
empty()
)return0;
}
最短公共父串
//輸出a和b最短公共父串的長度以及在該長度下可以生成的父串個數
#include
using
namespace std;
const
int maxn =15;
int d[maxn]
[maxn]
, f[maxn]
[maxn]
;int len1, len2, cnt;
char a[maxn]
, b[maxn]
;int
main()
for(
int i =
1; i <= len1; i++
)else}}
printf
("%d %d"
, d[len1]
[len2]
, f[len1]
[len2]);
}
//列印a和b最短公共父串
#include
using
namespace std;
const
int maxn =15;
int d[maxn]
[maxn]
;int flag[maxn]
[maxn]
;char str[maxn]
, str1[maxn]
;char p[maxn]
;int k;
void
print
(int l,
int r)
else
if(flag[l]
[r]==1)
else
}void
lcs(
)else
else}}
}print
(n, m)
;printf
("\n");
}int
main()
return0;
}
插入字元生成回文串
#include
using
namespace std;
const
int maxn =
1005
;int n, m;
int d[maxn]
[maxn]
;int
dp(string s, string t)
return d[n]
[m];
}int
main()
分割字串生成回文子串
#include
using
namespace std;
const
int maxn =
1050
;int d[maxn]
;int s[maxn]
[maxn]
;string st;
intwork()
// odd_left
p = i -1;
q = i;
while
(p >=
0&& q < len && st[p]
== st[q]
)// odd_right
p = i;
q = i +1;
while
(p >=
0&& q < len && st[p]
== st[q])}
}// s[i][j]是否為回文串
intmain()
} cout << d[len -1]
<< endl;
}return0;
}
刪除最少字元使兩串相同
int
delet
(string s, string t)
return n + m -
2* d[n]
[m];
}
修改或刪除最少字元使兩串相同
int
edit
(string s, string t)
return d[n]
[m];
}
字串彙總
字串的暴力,挺無腦的,沒什麼想說的。inline void init inline int query int l,int r 第一次是橫著hash,用的是p1,此時的 h 表示的是第 i 行長度為 j 的字首串的hash值。第二次是豎著hash,用的是p2,此時的 h 發生了更新,此時的 h 變成...
字串方法彙總
1.定義字串直接量 var s abc 2.構造字串 var s new string 建立空字串 var s new string adafwv 字串初始化 3.計算字串長度s.length 注意 字串長度不可以像陣列一樣動態增長,但可使用下標來定義單個字元 4.查詢字串 charat 返回字串中...
字串函式彙總
為什麼strcpy要有返回值?返回strdest的原始值使函式能夠支援鏈式表示式,增加了函式的 附加值 同樣功能的函式,如果能合理地提高的可用性,自然就更加理想。鏈式表示式的形式如 int ilength strlen strcpy stra,strb 又如 char stra strcpy new...