• 实现字符串和从0到n-1范围内的数字串的一一对应---->poj1200


     1 #include<iostream>
     2 using namespace std;
     3 const int maxn=1e6+5;
     4 int num[maxn];
     5 string s;
     6 int main()
     7 {
     8     int nc;//字符串s中不同字符的个数 
     9     cin>>s>>nc;
    10     int len=s.length();
    11     
    12     int cnt=1;
    13     num[s[0]]=0; 
    14     for(int i=1;i<len;i++)
    15     {
    16         if(num[s[i]]==0)
    17         {
    18             num[s[i]]=cnt++;
    19         }
    20         if(cnt==nc)
    21         {
    22             break;
    23         }
    24     }
    25 
    26     for(int i=0;i<len;i++)
    27     {
    28         cout<<num[s[i]];
    29     }
    30     cout<<endl;
    31 }

     在这个基础上,完成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
    ",ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    nginx源码分析——http模块
    linux 信号处理
    文件读写监控(inotify, systemtap)
    rem
    vscode 将本地项目上传到码云
    vue 模拟去哪网
    form 文件上传
    分页
    修改默认select样式
    模拟select下拉框、复选框效果
  • 原文地址:https://www.cnblogs.com/dragondragon/p/12330973.html
Copyright © 2020-2023  润新知