- 浏览: 103022 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
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 1554算法设计:n个连续自然数,乱序存放于一个数组中,缺失一个,缺失 ... -
Reverse String
2010-09-19 16:46 1000package org.jyjiao; public c ... -
0906--拼接出最小整数
2010-09-06 10:38 1182题目描述:设有n个正整数,将它们联接成一排,组成一个最小的多位 ... -
0830--算法练习题
2010-08-28 17:42 9311. 内存中有一个长数组,条目数为10万,数组单元为结构体st ... -
??0829-Joseph问题
2010-08-28 16:39 873N个人排成一圈,指定第一个人,去除他,然后跳着一人去除第3人, ... -
???0828--存储空间管理器+n选m问题
2010-08-28 16:36 1032用单链表实现一个存储空间管理器,包括分配和释放空间。要求释放 ... -
# 0827--算法练习题
2010-08-25 14:12 8201. 一个文本文件有多行 ... -
!!!0826--图
2010-08-25 14:11 651baidu1 -
###0825-1 最短路径+最小支撑树+路径压缩+等价类问题+拓扑排序
2010-08-25 13:28 833dijkska算法实现 floyed算法实现 ... -
# 0823--树进阶
2010-08-25 13:27 7331. 判断一棵二叉树是否平衡 2. 构造AVL ... -
#0822 系分
2010-08-23 14:18 671http://www.blogjava.net/ITdavid ... -
0821集合问题
2010-08-23 14:16 786{ aaa, bbb, ccc},{bbb, ddd }, { ... -
0820-mirosoft
2010-08-20 12:43 950传说中微软的几道算法题,练习一下吧: 1.设计一个 ... -
0819- 找共同url
2010-08-18 17:47 831给你a、b两个文件,各存放50亿条url,每条url各占用64 ... -
0819--找队友
2010-08-18 11:52 1046全体员工玩分组游戏,前面五分钟大家分头找队友,并将每个人找到的 ... -
0817--概率问题
2010-08-16 18:53 738输入:N(整数)输入:数据文件A.txt,不超过6条记录,字符 ... -
0816--支配数
2010-08-16 18:52 772支配数:数组中某个元素出现的次数大于数组总数的一半时就成为支配 ... -
0815-二叉树
2010-08-14 11:10 968第一题: 在一棵一般的二叉树中找到指定的元素,如果有重 ... -
0811-3 对webservice执行自动化测试
2010-08-11 20:05 9520811-3 对webservice执行自动化测试 i ... -
0812-字典树算法
2010-08-11 19:59 19591. 在用户输入英文单词时,经常发生错误,我们需要对其进行纠错 ...
相关推荐
1. **暴力搜索**:最直观的方法是遍历字符串A的每一个字符,然后从当前位置开始匹配字符串B的所有字符。如果匹配成功,就找到了子串,返回True;如果在A的末尾都没有找到匹配,返回False。这种方法的时间复杂度是O(n...
= '\0'` 判断字符串是否结束是一种有效的方法。 6. **优化策略**: - 如果字符串A较短,B较长,可以考虑动态分配与A相同长度的数组来存储中间结果,减少空间占用。 - 为避免频繁的内存分配和释放,可以预先分配...
这个代码主要是判断一个字符串是否为回文。回文就是正着读和反着读是同一字符串,比如abcdbca就是一回文。
### 如何判断字符串的个数 #### 方法简介 在本例中,我们需要编写一个名为 `SubstringCount` 的函数,该函数接受两个参数:`str` 和 `substring`。其中 `str` 是源字符串,而 `substring` 是我们想要查找的子字符...
1. **中文符号**:如果需要判断字符串中是否包含中文符号,可以使用更广泛的Unicode范围,例如`[\u3002\uff1b\uff0c\uff1a\u201c\u201d\u2018\u2019]`等。 2. **特殊字符处理**:在实际应用中,还需要考虑到特殊字符...
### Shell字符串比较与数字判断详解 #### 一、概述 在Shell脚本编程中,进行字符串和数字的比较是一项常见的任务。本文将详细介绍如何在Shell脚本中进行字符串和数字的比较,包括基本的比较操作符及其使用场景,并...
在本题目中,我们需要编写一个程序来检测输入的字符串中所有数字出现的位置,并将这些位置输出。这是一个关于C++编程、字符串处理以及面向对象编程的知识点应用问题。下面我们将详细探讨如何实现这个功能。 首先,...
判断字符串b是否是a的非连续子串,例如2018字符串是否是233330321333338的非连续子串,
**回文**是一种特殊的字符串,它从前向后读和从后向前读都是一样的。例如,“madam”、“racecar”等都是回文字符串。回文检测是计算机科学中的一个经典问题,广泛应用于文本处理、密码学等领域。 #### 二、C#语言...
以上四种方法都可以用来判断一个字符串是否为有效的IPv4地址。其中,方法一较为简单,但只能进行简单的字符匹配;方法二使用了系统库函数`inet_pton`,可以更准确地判断字符串是否符合IPv4地址的要求;方法三和方法...
这个操作涉及到在一个字符串A中查找另一个字符串B在特定位置之后的首次出现。首先,我们需要从字符串A的第n个字符开始遍历,逐个比较字符与B的首字符,如果匹配则继续比较后续字符,直到找到完整的B或者遍历结束。...
在 Delphi 编程环境中,判断字符串中是否包含中文字符是一项常见的需求,特别是在处理文本数据时。本资源提供了一个巧妙且实用的技巧来实现这一功能。Delphi 是一种基于 Object Pascal 的集成开发环境,它拥有强大的...
`strcmp(a[i], a[j]) > 0` 判断字符串 `a[i]` 是否大于 `a[j]`。 - **交换字符串**: 如果 `a[i]` 大于 `a[j]`,则交换它们的位置。`t = a[i], a[i] = a[j], a[j] = t;` #### 4. 特殊处理 - **检测文件结束标志**: ...
在JavaScript中判断两个字符串是否相等是编程基础中的重要内容,尤其对于初学者来说,理解字符串相等性的判断方法对于编写有效的代码至关重要。首先,要了解JavaScript提供了两种相等性运算符:“==”和“===”。这...
删除字符串中的字符1 题目删除一个字符串中的指定字母,如:字符串 “aca...则将i位置的b,赋值给p位置,然后i和p都递增,这样的话,原来要删除的a就被后面的字符“覆盖”掉了,循环结束后相当于字符串中的a都被删除了
- `startsWith()`: 判断字符串是否以指定的前缀开头。 - `endsWith()`: 判断字符串是否以指定的后缀结尾。 - **示例**: ```java String str = "Hello World"; System.out.println(str.startsWith("Hello")); //...
但在实际开发中,我们经常需要判断一个字符串是否包含另一个子字符串,所以开发者们会自行定义这个方法。例如,可以通过扩展String的原型来添加这个方法: ```javascript if (!String.prototype.contains) { ...
Python 中提供了 startswith() 和 endswith() 函数来判断字符串是否以某个子字符串开始或结束。 * startswith(substring[,start[,end]]):判断字符串是否以 substring 字符串开始的。 * endswith(suffix[,start[,...
在ABAP中,字符串连接是一种常见的操作方式,用于将两个或多个字符串合并成一个新的字符串。实现字符串连接的方法主要是通过`CONCATENATE`语句。 **语法示例**: ```abap CONCATENATE dobj1 dobj2 INTO result [IN...
中英文字符串的切割边界的确定算法 >> 一些背景知识: 1. 一个汉字在c\c++的存储, 使用2个字节(char)存储; 2. 汉字存储的第一个char, 其值一定大于'~'(0111 1110=126),否则将导致识别歧义; 此处, 使用"单ASCII...