- 浏览: 97751 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
dreamoftch:
...
对hibernate的理解 -
quanwsx:
对hibernate的理解 -
zxt1985:
太坑爹了……啥都没
**java网络编程 -
Java_zhou:
坑爹啊。。。
**java网络编程 -
juda:
this code can not work rightly ...
Reverse String
编程题
判断字符串 b 的所有字符是否都再字符串 a 中出现过,a,b都是可能包含汉字的字符串。b中重复出现的汉字,那么a中也要至少出现相同的次数。
汉字使用gbk编码(简单的所,用两个字节表示一个汉字,高字节最高位为1的代表汉字,低字节最高位可以不为1)。
int is_include(char *a , char *b)
返回0 表示没有都出现过,返回1表示都出现过。
#include <stdio.h> #include <windows.h> #include <string.h> typedef struct node{ char key[2]; int count; int tag; }hnode; /*--------------------------hash设计-------------------------------- /*本部分的哈希表采用二次探查闭散列算法*/ /* int hash(hnode item,int m) * 功能: 哈希函数 * item: 字符结构体 * m: 散列质数 */ int hash(hnode item,int m){ int ret; char key[2]; key[0]=item.key[0]; key[1]=item.key[1]; if(item.tag==0){// 英文字符 ret=key[0]%m; }else{ //中文字符 ret=((key[0])*key[1])%m; if(ret<0){ ret=-ret; } } return ret; } /* int p(hnode item,int i,int m2) * 功能: 第i次探查函数 * item: 字符结构体 * i:第i次探查 * m2: 第二质数 */ int p(hnode item,int i,int m2){ return i*hash(item,m2); } /* insert_node(hnode *item,hnode *table,int hlen,int m1,int m2) * 功能: 将字符结构体插入一个哈希表中 * item: 需要检查的字符结构体 * table: 待检索的哈希表 * hlen: 带检索的哈希表的大小 * m1: 第一质数 * m2: 第二质数 */ void insert_node(hnode item,hnode *table,int m1,int m2){ int index=hash(item,m1); int i=1; while(true){ hnode node=*(table+index); if(node.tag==2){ item.count=1; *(table+index)=item; //出错点!!! break; }else{ if(node.tag==item.tag){ if(node.key[0]==item.key[0] && node.key[1]==item.key[1] ){ (*(table+index)).count=node.count+1; //出错点!!! break; } }else{ index=(index+p(item,i++,m2))%m1; } } } } /* 功能: 为一个字符串创建哈希表 * list: 字符串 * len: 字符串的长度 * m1: 质数1 * m2: 质数2 */ hnode* create_hash(char *list,int len,int m1,int m2){ /* 新建hashtable,长度为字符串长度的两倍 */ hnode *htable=new hnode[len*2]; for(int k=0;k<len*2;k++){ hnode node; node.tag=2; *(htable+k)=node; } /* 为list中的每个字符创建hashnode */ /* 将每个hashnode insert到 hashtable中 */ /* 返回 hashtable的指针 */ for(int i=0;i<len;i++){ hnode *node=new hnode(); if(list[i]>0){ node->key[0]=list[i]; node->key[1]='#'; node->tag=0; }else{ node->key[0]=list[i]; node->key[1]=list[i++]; node->tag=1; } insert_node(*node,htable,m1,m2); } return htable; } /* 求比n小的最大质数 */ int getZhiShu(int n){ int tag=0; int ret=-1; for(int i=n;i>=2;i--){ for(int j=2;j<i;j++){ if(i%j==0){ tag=1; break; } } if(tag==0){ ret=i; break; } tag=0; } return ret; } /*----------判断字串函数 int is_include(char *a , char *b)-----------------*/ /* *功能: 判断字符串包含关系 *a, b: 待判断的两个字符串 */ int is_include(char *a , char *b){ /*求得a、b的字符数目*/ int len1=strlen(a); int len2=strlen(b); int hashlen1=len1*2; int hashlen2=len2*2; //获得第一和第二质数 int m11=getZhiShu(hashlen1); int m12=getZhiShu(m11-1); int m21=getZhiShu(hashlen2); int m22=getZhiShu(m21-1); //创建两个哈希表,哈希表的大小为字符数的两倍 hnode *htable2=create_hash(b,len2,m21,m22); hnode *htable1=create_hash(a,len1,m11,m12); //hashb中的每个元素在 hasha中进行查找 // 如果没找到,则退出 return -1 // 如果找到了 //如果b中的个数比a中少,则查找下一个 //退出 return -1 for(int i=0;i<hashlen2;i++){ hnode node2=*(htable2+i); if(node2.tag!=2){ int index=hash(node2,m11); //出错点!!!!!! hnode node1=*(htable1+index); int n=0; while(node1.tag!=2){ if(node1.tag==node2.tag){ if(node1.key[0]==node2.key[0] &&node1.key[1]==node2.key[1]){ if(node1.count>=node2.count){ break; }else{ return 0; } } } else{ index=(index+p(node2,n++,m12))%m11; node1=*(htable1+index); } } if(node1.tag==2){ return 0; } } } return 1; } void main(){ char *a="aabbcc黄老师"; char *b="abc黄宇"; int ret=is_include(a, b); printf("result is :%d\n",ret); }
发表评论
-
0928--算法题
2010-09-28 11:14 1507算法设计:n个连续自然数,乱序存放于一个数组中,缺失一个,缺失 ... -
Reverse String
2010-09-19 16:46 920package org.jyjiao; public c ... -
0906--拼接出最小整数
2010-09-06 10:38 1149题目描述:设有n个正整数,将它们联接成一排,组成一个最小的多位 ... -
0830--算法练习题
2010-08-28 17:42 8961. 内存中有一个长数组,条目数为10万,数组单元为结构体st ... -
??0829-Joseph问题
2010-08-28 16:39 817N个人排成一圈,指定第一个人,去除他,然后跳着一人去除第3人, ... -
???0828--存储空间管理器+n选m问题
2010-08-28 16:36 991用单链表实现一个存储空间管理器,包括分配和释放空间。要求释放 ... -
# 0827--算法练习题
2010-08-25 14:12 7711. 一个文本文件有多行 ... -
!!!0826--图
2010-08-25 14:11 617baidu1 -
###0825-1 最短路径+最小支撑树+路径压缩+等价类问题+拓扑排序
2010-08-25 13:28 792dijkska算法实现 floyed算法实现 ... -
# 0823--树进阶
2010-08-25 13:27 7031. 判断一棵二叉树是否平衡 2. 构造AVL ... -
#0822 系分
2010-08-23 14:18 633http://www.blogjava.net/ITdavid ... -
0821集合问题
2010-08-23 14:16 755{ aaa, bbb, ccc},{bbb, ddd }, { ... -
0820-mirosoft
2010-08-20 12:43 906传说中微软的几道算法题,练习一下吧: 1.设计一个 ... -
0819- 找共同url
2010-08-18 17:47 784给你a、b两个文件,各存放50亿条url,每条url各占用64 ... -
0819--找队友
2010-08-18 11:52 1006全体员工玩分组游戏,前面五分钟大家分头找队友,并将每个人找到的 ... -
0817--概率问题
2010-08-16 18:53 705输入:N(整数)输入:数据文件A.txt,不超过6条记录,字符 ... -
0816--支配数
2010-08-16 18:52 732支配数:数组中某个元素出现的次数大于数组总数的一半时就成为支配 ... -
0815-二叉树
2010-08-14 11:10 916第一题: 在一棵一般的二叉树中找到指定的元素,如果有重 ... -
0811-3 对webservice执行自动化测试
2010-08-11 20:05 9060811-3 对webservice执行自动化测试 i ... -
0812-字典树算法
2010-08-11 19:59 14661. 在用户输入英文单词时,经常发生错误,我们需要对其进行纠错 ...
相关推荐
这个代码主要是判断一个字符串是否为回文。回文就是正着读和反着读是同一字符串,比如abcdbca就是一回文。
有两个字符串A,B,判断B是不是A的子串
判断字符串b是否是a的非连续子串,例如2018字符串是否是233330321333338的非连续子串,
(关于空间的占用,如果要用一个和字符串a一样长的数组counter来计录a中各起点对应与b最大重合子字符串,这个数组也要和a一样长,空间上也不合适,除非情形很特殊,a短b长,不然不如直接malloc()一个堆空间来储存...
1.写一个程序判断字符串中数字的位置(不限制使用面向对象编程) 例如: 输入 a3b4c5 输出 2 4 6
1. 给定字符串A、B以及整数n,试求出B在A的第n个字符后的出现位置; 2. 给定两个字符串A、B,试输入A和B连接后的字符串; 3. 给定字符串A和整数n、m,求出A的第 n 个和第m个字符之间的子串并输出; 4. 给定两个...
char [] a = new char[5]; char [] b = new char[5]; int i = 0,j = 0; //第一个循环,输入数组a for (i = 0; i ; i++) { a[i] = char.Parse(Console.ReadLine()); //Console.WriteLine(a[i]); } //第二个...
中英文字符串的切割边界的确定算法 >> 一些背景知识: 1. 一个汉字在c\c++的存储, 使用2个字节(char)存储; 2. 汉字存储的第一个char, 其值一定大于'~'(0111 1110=126),否则将导致识别歧义; 此处, 使用"单ASCII...
您可能感兴趣的文章:Android Force Close 出现的异常原因分析及解决方法C#判断字符串是否是数字(实例)C#自动判断Excel版本使用不同的连接字符串C#判断字符串是否存在字母及字符串中字符的替换实例C#实现判断字符...
变换的规则是:从A串的第一个字符开始,依次取出串中的每个字符,可以选择将取出的字符直接放入字符串B或C的尾部。若字符串A或B中还有字符,可以继续从A中按顺序取出单个字符放入串B或C的尾部,也可以选择从串B的尾部...
三、判断一个字符串是否是首字母大写,其余字母都是小写。 例如 输入:True 输出: true 四、输入一个字符串,字符串是字母和数字的组合,编程实现输出一个新的字符串,...
针对Oracle数据库中汉字在不通的字符集下所占字符长度不通,在保存时可能需要对源字符串的长度进行判断。 实现过程如下 /** * 针对汉字 进行计算长度 * @param string 计算的字符串 * @param ...
3、请统计a字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 例 {‘a’:4,’b’:2}。 4、输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)。 5、输入...
数据库给定字符串,对相应的字符串进行分割。比如 ',a,b,c,d,e,'则分割出来的结果为a b c d e。
LeetCode判断字符串是否循环 Leetcode 2017年4月12日 455 分蛋糕: 有g个孩子,s块蛋糕,每个孩子有一个贪心因子m,每块蛋糕可大可小n,若蛋糕大小n大于等于m,则可以分配这块蛋糕给这个孩子。每个孩子只能分得一块...
主要介绍了python七种方法判断字符串是否包含子串,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
2. 创建包cn.qtech.util,在其中新建类RepeatedStringEstimator,该类有两个方法:(1)public boolean estimate(String s),用于判断字符串s是不是2-重复串(字符串中每个出现的字符出现2次且仅两次),如判断aaaa...
判断字符串中是否有某个子串 这里有六个方法 不使用string模块 1.in 存在则输出TRUE 不存在则输出FALSE a = 'love you' b = 'you' c = 'no' print(b in a) #True print(c in a) #False 2.find() 从左向右查找子串 ...
1 string a b; Console.WriteLine("...-1) //判断字符串之间是否包含 { Console.WriteLine("两个字符串连接为:" + a + b); } else { Console.WriteLine("两个字符串为:{0}{1}" a b); }
注意数字与字符串的区别. 整数比较 -eq 等于,如:if [ “$a” -eq “$b” ] -ne 不等于,如:if [ “$a” -ne “$b” ] -gt 大于,如:if [ “$a” -gt “$b” ] -ge 大于等于,如:if [ “$a” -ge “$b” ] -lt 小于,如:...