实现字符串和从0到n-1范围内的数字串的一一对应---->poj1200
#include<iostream>
using namespace std;
const int maxn=1e6+;
int num[maxn];
string s;
int main()
{
int nc;//字符串s中不同字符的个数
cin>>s>>nc;
int len=s.length(); int cnt=;
num[s[]]=;
for(int i=;i<len;i++)
{
if(num[s[i]]==)
{
num[s[i]]=cnt++;
}
if(cnt==nc)
{
break;
}
} for(int i=;i<len;i++)
{
cout<<num[s[i]];
}
cout<<endl;
}
在这个基础上,完成crazy search
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int num[300];
int Hash[16000009];//hash函数
int main()
{
int n,nc;
string str;
while(~scanf("%d%d",&n,&nc))
{
memset(Hash,0,sizeof(Hash));
cin>>str;
int len=str.length();
int cnt=1;
num[str[0]]=0;
for(int i=1; i<len; i++) //将nc个字符转换为对应的nc进制的数,字母和数字是一一对应的
{
if(num[str[i]]==0)//只有当这个字符没有转换过的时候,才将该字符对应成一个数字
{
num[str[i]]=cnt;
cnt++;
}
if(cnt==nc) break;
} //注重端点,最后一个端点起点从len-n开始,终点在len-1
int ans=0,sum;
for(int i=0; i<=len-n; i++)//等号!!!!!!
{
sum=0;
for(int j=i; j<i+n; j++)
{
sum=sum*nc+num[str[j]];//特别要注意这里因为是nc进制的计算所以乘上的是nc,不要因为我们习惯的十进制计算而乘上10
}
//这样每一个长度为n的不同的子串都会唯一的对应一个数字
if(Hash[sum]==0)
{
Hash[sum]=1;
ans++;
}
} printf("%d\n",ans);
}
return 0;
}
实现字符串和从0到n-1范围内的数字串的一一对应---->poj1200的更多相关文章
- java去除字符串后面的\0
java去除字符串后面的\0 private String filterCode(String string) { if (string != null) { string = string.trim ...
- c语言中strcpy与strlen函数对字符串最后的'\0'的处理
对于strcpy来说,它会把字符串最后的‘\0’一起拷贝 对于strlen来说,它计算字符串长度的时候不会把最后的‘\0’计算进去
- Shell脚本中字符串判空:使用-z 字符串长度为0时,为真,-n字符串长度不为0,为真。这两个都不靠谱【转】
最近发现使用 -z 和 -n 来判断字符串判空,或不空时,很不靠谱. 使用下面的方法最可靠: if [ "x${value}" == "x" ] ...
- Python-给数字/字符串前加0
zfill方法用来给字符串前面补0
- 输入一个字符串,内有数字和非数字字符。例如:a123x456 17960 302tab5876。将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。
题目内容:输入一个字符串,内有数字和非数字字符.例如:a123x456 17960 302tab5876.将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1 ...
- IT公司100题-25-求字符串中的最长数字串
问题描述: 实现一个函数,求出字符串中的连续最长数字串.例如输入”12345cbf3456″,输出”12345″. 函数原型为: void conti_num_max( const char * sr ...
- 读入一个字符串str,输出字符串str中连续最长的数字串
要求: 读入一个长度不超过256的字符串,例如“abc123defg123456789hjfs123456”.要求输出“123456789” 思路: 遍历字符串,如果是数字串则计算往后一共有多少个数字 ...
- ZT 输入一个字符串,查找它的第一个数字串,并返回其个数
/*查找字符串中的数字串问题 输入一个字符串,查找它的第一个数字串,并返回其个数 */ #include <stdio.h> char firstnum(char *input,char ...
- ZT 查找字符串中连续最长的数字串
查找字符串中连续最长的数字串 有俩方法,1)比较好理解一些.2)晦涩 1) /* 功能:在字符串中找出连续最长的数字串,并把这个串的长度返回, 并把这个最长数字串付给其中一个函数参数outputstr ...
随机推荐
- qt creator源码全方面分析(2-5)
目录 Creating Wizards in Code 介绍 相关类 IWizardFactory的设置器和获取器 Creating Wizards in Code 介绍 如果基于模板的自定义向导提供 ...
- 排查 Kubernetes HPA 通过 Prometheus 获取不到 http_requests 指标的问题
部署好了 kube-prometheus 与 k8s-prometheus-adapter (详见之前的博文 k8s 安装 prometheus 过程记录),使用下面的配置文件部署 HPA(Horiz ...
- Keepalived 介绍 原理
keepalived是什么: 这里先和前面的LVS 联系一下,我们平时使用一台机器运行 LVS 进行数据的转发,这里会有两个问题1.如果这台LVS 故障了怎么办?整个集群系统都会停止工作2.LVS后端 ...
- LVS服务原理以及搭建
一.LVS简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,目的在于使用集群技术和Linux操作系统实现一个高性能.高可用的服务器.它 ...
- 【全集】IDEA入门到实战
课程介绍 IDEA是一款功能强悍.非常好用的Java开发工具,近几年编程开发人员对IDEA情有独钟.虽然IDEA功能很强大,但目前市面讲解的不细致.不系统,导致很多IDEA初学者要么无从下手,要么 ...
- cache和内存屏障
1 cache简介 1.1 cache缓存映射规则 tag查看cache是否匹配,set index |tag |set index |block offset ||20-bit |7-bit |5b ...
- this关键字和static关键字
this关键字 普通方法中,this总是指向调用该方法的对象. 构造方法中,this总是指向正要初始化的对象. this区分成员变量和全局变量的作用,在当前类中可以省略. this的常用方法: 让类中 ...
- GNU make doc - 3.8
Note that the directory prefix (D), as described in Implicit Rule Search Algorithm, is appended (aft ...
- MySQL中的索引、左连接、右连接、join、sql执行顺序
逻辑架构: 1.连接层 2.服务层 3.引擎层(插拔式) 4.存储层 存储引擎: 常用的有:MyISAM.InnoDB 查看命令:show variables like '%storage_engin ...
- 802.11有线等效加密WEP
有线等效加密(WEP)标准是802.11无线安全早期的解决方案,WEP并不安全. 既然WEP并不安全,为什么还要学习WEP呢? WEP简单,相比后续出现的加密协议,它不要求有多么强大的计算能力.一些老 ...