Chapter 5——データ構造——文字列
7114 ワード
1.タイトルリスト
poj 1035、poj 3080、poj 1936
2.POJ 1035——Spell checker
2.1テーマの説明
Description:You,as a member of a development team for a new spell checting program,arto write a module that will check the corectnes of given words using a known dict workerry of alcorectworld therictworld therictins.Irectionit.that can be obatained by one of the follwing operations:?deleting of one letter from the word;replecng of one letter in the word with an arbitrary letter;insetitititing of one arbitrryletter into the wod.Your tass s s to write the program that will find all possible replaccements from the dictctorarary forevevevrygivewod.Input:The first part partof the ininput the input the input ficonconconcontititititititititititititis the the the the inininininininininininininininininininininininininininininininininininininininininininininininininininininininin' on a separate line.All wonds ararare different.The e e e will be at most 10000 wods in the dictary.The nexpat pat pat pat of the file contains all wowowoworss s s s s worsrsrsrsaattttttttttttttttttttttttttwichcheced.Eachワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードオンライン.Ths.Thisisisisiss.Thisisisisisisis.Thisisisisisispaisisisisisはい、「wonds from the dictorary and wonds to be checked」consist only of smaalalalalalphaaabeeticcharacters and each one contains 15 characters at most.Outputt:Write to the output file exactly one line e e e e e forforeveveveveeeerychcheeeeeeeeeeeeeededededererererererererererererererererestststststststststststststthethethethethethethethetherererererererererererererererererererererererererererereアクション.If the word iscorectthen write thisword first,then write thisword first,then write the the character'(colon)、and after a single sprite alits possiblblble replacments,then parated thethethetherererererererepated thethethetheaparacts s thethethethethethethethethethethethethethethethethererererererererererererererererererererererererereparts s s s s thethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethetheof the input file).If there areのreplaccemens for this word then the line feed Shuld immediately followe the colon.
この問題は文字列のパターンマッチングの問題です.文字を削除、変更、挿入することしかできないので、復元できるかどうかを判断します.2つの文字列の長さを基準に議論します.は、2つの文字列の長さが同じである場合、2つの文字列の対応するビットの異なる文字の数を統計し、1より大きいと元に戻すことができません. は、2つの文字列の長さが1つ足りない場合、長さが小さい文字列がモードマッチング可能かどうかを判断し、長さが大きい文字列が可能であれば、元に戻すことができる.モードマッチング:つまり、1つの列が別の列のサブストリングであるかを判断する(ここでのサブストリングは連続を要求しない) .、2つの文字列の長さが1より大きい場合、元に戻すことはできません. 次に簡単にstringとmapでよく使われる操作関数をまとめます.(1).string: erase(iter):単一の要素を削除し、iterは削除が必要な要素のシーズマリー である. insert(pos,string):pos位置に文字列string を挿入する. insert(iter,string):iterディケンサ位置にstringを挿入する(注意:insert操作で、挿入できる位置にはstring.length()があります. find(string):パラメータstringが元の文字列のサブストリングである場合、stringがその中に出現する最初の位置を返します. substr(pos,len):posビットから、長さlenの文字列(2)を返します.map mapのディケンサ:map:iterator it; mapの要素挿入:map[T 1]=T 2 map検索キー:map.find(T) map要素のアクセス:下付きアクセスまたはローズマリーアクセス、注意maoのディケンサはfirstとsecondメンバーを含む構造体である.
2.3コード
4.1問題の説明
Description
You have devised a new encryypttechnique which encodes a message by inserting between its characters Ladomlygeneneneneininininininininininins.Because of pending patetestissususues well will not distststststininininininininininininininininininininininininininininininininininininininininininininststststststststststststinininininininininininininininininininininininininininininininininininininininininininincessary to write a programthat checks if the message is really encoded in the final string.
Gven two stings and t,you have to decide whether s s s s s a subsequence of t,i.e.if you can remove characters from t such that the concatent of the remaning characters.Input
The input contains several testcases.Each is specified by two stings,t of alphanumeric ASCII characters separated byホワイトパス.The length of s and t will more than 100000.Output
For each test case output“Yes”,if s is a subsequence of t,otherswise out put“No”.
LCS思想を使用して、d配列ストレージを使用する必要はありません.記憶空間が10000*10000に達するため、スクロール配列を使って最適化することもできます.ここでは議論しません.
2.3コード
文字列のシリーズのテーマは有限を列挙して、よくある文字列の操作を熟知するべきで、添削を含んで調べて、およびいくつかの高めたデータの構造の使用、set、map、stringなどを含んで、プログラミングの効率を高めることができます.
文字列の問題については、まとめを多くする必要があります.
poj 1035、poj 3080、poj 1936
2.POJ 1035——Spell checker
2.1テーマの説明
Description:You,as a member of a development team for a new spell checting program,arto write a module that will check the corectnes of given words using a known dict workerry of alcorectworld therictworld therictins.Irectionit.that can be obatained by one of the follwing operations:?deleting of one letter from the word;replecng of one letter in the word with an arbitrary letter;insetitititing of one arbitrryletter into the wod.Your tass s s to write the program that will find all possible replaccements from the dictctorarary forevevevrygivewod.Input:The first part partof the ininput the input the input ficonconconcontititititititititititititis the the the the inininininininininininininininininininininininininininininininininininininininininininininininininininininininin' on a separate line.All wonds ararare different.The e e e will be at most 10000 wods in the dictary.The nexpat pat pat pat of the file contains all wowowoworss s s s s worsrsrsrsaattttttttttttttttttttttttttwichcheced.Eachワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードワードオンライン.Ths.Thisisisisiss.Thisisisisisisis.Thisisisisisispaisisisisisはい、「wonds from the dictorary and wonds to be checked」consist only of smaalalalalalphaaabeeticcharacters and each one contains 15 characters at most.Outputt:Write to the output file exactly one line e e e e e forforeveveveveeeerychcheeeeeeeeeeeeeededededererererererererererererererererestststststststststststststthethethethethethethethetherererererererererererererererererererererererererererereアクション.If the word iscorectthen write thisword first,then write thisword first,then write the the character'(colon)、and after a single sprite alits possiblblble replacments,then parated thethethetherererererererepated thethethetheaparacts s thethethethethethethethethethethethethethethethethererererererererererererererererererererererererereparts s s s s thethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethethetheof the input file).If there areのreplaccemens for this word then the line feed Shuld immediately followe the colon.
Sample Input:
i
is
has
have
be
my
more
contest
me
too
if
award
#
me
aware
m
contest
hav
oo
or
i
fi
mre
#
Sample Output:
me is correct
aware: award
m: i my me
contest is correct
hav: has have
oo: too
or:
i is correct
fi: i
mre: more me
2.2解決の考え方この問題は文字列のパターンマッチングの問題です.文字を削除、変更、挿入することしかできないので、復元できるかどうかを判断します.2つの文字列の長さを基準に議論します.
2.3コード
#include
#include
#include
#include
#include
#include
#include
4.POJ 1936——All in All4.1問題の説明
Description
You have devised a new encryypttechnique which encodes a message by inserting between its characters Ladomlygeneneneneininininininininininins.Because of pending patetestissususues well will not distststststininininininininininininininininininininininininininininininininininininininininininininststststststststststststinininininininininininininininininininininininininininininininininininininininininininincessary to write a programthat checks if the message is really encoded in the final string.
Gven two stings and t,you have to decide whether s s s s s a subsequence of t,i.e.if you can remove characters from t such that the concatent of the remaning characters.Input
The input contains several testcases.Each is specified by two stings,t of alphanumeric ASCII characters separated byホワイトパス.The length of s and t will more than 100000.Output
For each test case output“Yes”,if s is a subsequence of t,otherswise out put“No”.
Sample Input
sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter
Sample Output
Yes
No
Yes
No
2.2問題解決LCS思想を使用して、d配列ストレージを使用する必要はありません.記憶空間が10000*10000に達するため、スクロール配列を使って最適化することもできます.ここでは議論しません.
2.3コード
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 100010;
char s1[maxn], s2[maxn]; // dp , 1
int main(){
while (~scanf("%s%s", s1 + 1, s2 + 1)){ // 1
int m = strlen(s1 + 1); // 1 !!
int n = strlen(s2 + 1);
// lcs
int i = 1;
for (int j = 1; j <= n; j++){
if (s1[i] == s2[j])
i += 1;
}
if (i == m + 1) printf("Yes
");
else printf("No
");
}
return 0;
}
5.まとめ文字列のシリーズのテーマは有限を列挙して、よくある文字列の操作を熟知するべきで、添削を含んで調べて、およびいくつかの高めたデータの構造の使用、set、map、stringなどを含んで、プログラミングの効率を高めることができます.
文字列の問題については、まとめを多くする必要があります.