两个字符串是否包含的问题
2012-08-18 11:10
218 查看
/* * 用轮询法来求解两个字符串是否包含的问题 时间复杂度O(m*n) * */ #include <stdio.h> #include <iostream> #include <string> using namespace std; bool CompareString(string longstring , string shortstring){ for(int i = 0;i < shortstring.length();i++) { int j=0; while(j < longstring.length()) { if(longstring[i] != shortstring[j]) { j++;} else { break;} } if(j == longstring.length()) { cout<<"false"<<endl; return 0; } } cout<<"true"<<endl; return 1; } int main(int argc, char **argv) { string longstring="ABCDEFGHLMNOPQRS"; string shortstring="DCGSRQPOZ"; CompareString(longstring,shortstring); return 0; }
/* * 用对两个字符串先分别排序,然后再同时对两个字符串依次轮询的方法求解两个字符串是否包含的问题 时间复杂度O(mlogm)+O(nlogn)+O(m+n) * */ #include <stdio.h> #include <iostream> #include <string> using namespace std; void Exchange(char &a,char &b) { char tmp; tmp=a; a=b; b=tmp; } int Partition(string &s,int p,int r) { char key=s[r]; int i=p-1; for(int j = p;j < r;j++) { if(s[j] <= key) { i=i+1; Exchange(s[i],s[j]); } } Exchange(s[i+1],s[r]); return i+1; } void QuickSort(string &s,int p,int r) { if(p<r) { int q=Partition(s,p,r); QuickSort(s,p,q-1); QuickSort(s,q+1,r); } } bool CompareString(string s1,string s2) { int posOne = 0; int posTwo = 0; while(posOne < s1.length() && posTwo < s2.length()) { while(s1[posOne] < s2[posTwo] && posOne < s1.length()-1) { posOne++;} if(s1[posOne] == s2[posTwo]){ posTwo++;} else{ break;} } if(posTwo == s2.length()) return true; else return false; } int main(int argc, char **argv) { string s1="ABCDEFGHLMNOPQRS"; string s2="DCGSRQPOZ"; QuickSort(s1,0,s1.length()-1); QuickSort(s2,0,s2.length()-1); //cout<<"***"<<s2<<endl; cout<<CompareString(s1,s2)<<endl; return 0; }
/* * 使用hashtable的方法求解两个字符串是否包含的问题 时间复杂度为O(m+n) * */ #include <stdio.h> #include <iostream> #include <string> using namespace std; int main(int argc, char **argv) { string str1="ABCDEFGHLMNOPQRS"; string str2="DCGSRQPOM"; int hash[58]; int num=0; for(int i=0;i < str2.length();i++) { int pos=str2[i]-'A'; hash[pos] = 1; num++; } for(int i=0;i < str1.length();i++) { int pos=str1[i] - 'A'; if(hash[pos] == 1) { hash[pos] =1; num--; } } if(num == 0) cout<<"true"<<endl; else cout<<"false"<<endl; return 0; }
/* * 使用bitmap的方法求解两个字符串是否包含的问题 时间复杂度为O(m+n) * */ #include <iostream> #include <string> using namespace std; #define getbit(x) (0x01 << (x - 'A')) bool AContainB(string &str1, string &str2) { int dict=0; int j=0; for(int i=0;i < str1.length();i++) { dict=dict | getbit(str1[i]); } for (j=0;j < str2.length();j++) { if((dict & getbit(str2[j])) != getbit(str2[j])) break; } //cout<<j<<endl; if(j == str2.length()) return true; else return false; } int main(int argc,char **argv) { string str1="ABCDEFGHLMNOPQRS"; string str2="DCGSRQPOZ"; bool res=AContainB(str1,str2); cout<<res<<endl; return 0; }
相关文章推荐
- 两个字符串是否包含问题
- 数据结构——算法之(042)(字符串移位包含的问题, s1是否可以由s2移位后得到)
- 字符串是否包含问题利用素数求解
- jsp验证是否包含中文逗号以及两个字符串包含逗号个数是否一致
- 程序员编程艺术:第二章、字符串是否包含问题
- 如何比较两个字符串是否相互包含
- java中判断两个字符串是否相等的问题
- 两个字符串hash问题:检查两个单词是否互为变位词和在一个字符串中第一个只出现一次的字符
- 第二章、字符串是否包含问题
- 字符串是否包含问题
- 模式匹配(pattern matching)问题:判断一个长为n的字符串X中是否包含常为m的字串Y(m<=n)
- 字符串问题---判断两个字符串是否为变形词
- 字符串是否包含的问题
- 【和LULY大神学算法】字符串是否包含问题
- 如何判断两个字符串是否相互包含?
- 比较两个字符串A和B,确定A中是否包含B中所有的字符。
- Java中比较两个字符串是否相等的问题
- 一道俩个字符串是否包含的问题
- 程序员编程艺术2:字符串是否包含问题
- 程序员编程艺术:第二章、字符串是否包含及匹配/查找/转换/拷贝问题