字符串str1、str2,测试str2中字符是否都包含在str1中。例如:str1="abcdef",str2="aaaaccc",则返回true
2014-06-24 10:33
381 查看
字符串str1、str2,测试str2中出现过的字符是否都包含在str1中,不考虑个数。例如:str1="abcdef",str2="aaaaccc",则返回true
算法描述:
step1:定义hash[26]并初始化为0。用来记录str2出现的字符
step2:轮询str2。字母映射到数组hash[]中,如果hash[i]==0,将hash[i]置为1,num++;否则不作任何操作。
step3:轮询str1。如果hash[i]==1(str2的某个字符在str1中),将hash[i]置为0,num--;否则不作任何操作。
step4:如果num==0,则返回true;否则返回false。
变形:字符串str1、str2,测试str2中字符是否都包含在str1中,考虑个数。例如:str1="abcdef",str2="aaaaccc",则返回false。
算法描述:
step1:定义hash[26]并初始化为0。用来记录str2出现的字符
step2:轮询str2。字母映射到数组hash[]中,如果hash[i]==0,将hash[i]置为1,num++;否则不作任何操作。
step3:轮询str1。如果hash[i]==1(str2的某个字符在str1中),将hash[i]置为0,num--;否则不作任何操作。
step4:如果num==0,则返回true;否则返回false。
//InPut:string str1;string str2 //OutPut:True or False //时间复杂度:T(N)=O(m+n);空间复杂度O(1) bool stringContain(string str1,string str2) { int hash[26] = {0}; int num = 0; //轮询短字符串 for(int i=0;i<str2.length();i++) //不是str2.length,是str2.length() { int index = str2[i]-'a'; if(hash[index]==0) { hash[index]=1; num++; } } //轮询长字符串 for(int j=0;j<str1.length();j++) { int index = str1[j]-'a'; if(hash[index]==1) { hash[index]=0; num--; if(num==0) break; } } if(num==0) return true; else return false; }
变形:字符串str1、str2,测试str2中字符是否都包含在str1中,考虑个数。例如:str1="abcdef",str2="aaaaccc",则返回false。
/*测试字符串str2中字符是否都包含在str1中,考虑字符个数*/ bool stringContain2(const string &str1, const string &str2) { unsigned int count[256] = {0}; // memset(count,0,sizeof(count)); int i, j, flagnum=0, len1=str1.length(), len2=str2.length(); if(len1<len2) return false; for(i=0;i<len2;i++) { count[str2[i]]++; //统计每个字符出现的个数(<2^32) flagnum++; } for(j=0;j<len1;j++) { if(count[str1[j]]>0) { count[str1[j]]--; flagnum--; } } if(flagnum==0) return true; else return false; }
相关文章推荐
- 定义3个final实例变量//判断str1、str2、str3是否执行"宏替换"
- 找出字符串的最长子串,要求子串的所有字符相同 例如:str ="sssddddabcdef" 则输出字串为:dddd
- 字符串替换 eg: str1="123%s456%s" str2={'a','b','c','d'}(将str1中的%s替换成str2中的字符)替换结果返回为:123a456bcd
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
- 判断是否是简单密码,不能包含相同的字符(如aaa,111),递增序列(abc,123),递减序列(cda,321)
- 将一个字符串的字符序列置为逆序,如将"abcdef"变为"fedcba"
- 密码最短长度为7,其中必须包含以下非字母数字字符: 1"
- 如何测试APK是否设置android:debuggable="false"
- 输入一个数,把它作为一个串,判断其中是否包含长度>=2的相同子串,如 果包含,返回1,不包含,返回0
- “搞笑”的C数组5["abcdef"]表示方法
- "密码最短长度为7,其中必须包含以下非字母数字字符1"解决方法
- 检测字符串中是否有非法的字符,如果有,返回true
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如: 原始字符串是"abc",打印得到下列所有组合情况
- 查询返回所有商品描述的前60位个字符,然后添加"..."
- 上传或下载当文件名包含有特殊字符"#"的处理
- "密码最短长度为7,其中必须包含以下非字母数字字符1"解决方法
- Shell脚本中滤掉"ssh -t"执行命令时返回的/r字符
- 编写一个方法用于验证指定的字符串是否为反转字符,返回true和false。请用递归算法实现
- 字符串匹配算法,包含通配符"*"、"?"的匹配
- 编制一个返回值为bool型的函数isPrimer(),用于判断参数是否为素数(是素数返回true,否则false),自编main函数用于测试