首页 > 其他分享 >哈希之应用--删除字符串

哈希之应用--删除字符串

时间:2022-12-01 18:02:58浏览次数:50  
标签:return -- pos char int 哈希 字符串 Hash


一 问题描述

    两个字符串A、B。从A中剔除存在于B中的字符。比如A=“hello world”,B="er",那么剔除之后A变为"hllowold"。空间复杂度要求是O(1),时间复杂度越优越好。

二 解题思路

    利用哈希

哈希之应用--删除字符串_#include

如图所示,构造一个哈希表,将字符串B映射到此表中,当要对A进行处理时,只需利用哈希函数进行查找即可。

三 测试效果

哈希之应用--删除字符串_i++_02

四 代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define Num 52
#define LEN 100
int HashChar[Num];

int Hash(char c) {
if(!isalpha(c)) return -1;
if(islower(c)) return c - 'a';
return c - 'A' + 26;
}
void InitialHash(char *B) {
int i;
int pos;
for(i = 0;B[i];i++) {
pos = Hash(B[i]);
if(pos == -1) {
perror("B contains illegal characters\n");
}
else HashChar[pos] = 1;
}
}
void DelSameStr(char *A, char *B) {
int i, j;
int pos;
i = 0;
while(A[i]) {
pos = Hash(A[i]);
if(HashChar[pos]) {
for(j = i;A[j];j++) {
A[j] = A[j + 1];
}
}
else i++;
}
}
int main() {
char A[LEN], B[LEN];
printf("A = ");
gets(A);
printf("B = ");
gets(B);
InitialHash(B);
DelSameStr(A, B);
printf("after coping...");
puts(A);

return 0;
}


五 编程体会

    此题要想实现快速查找,哈希是个不错的选择,这个查找的效率为O(1),而由于哈希表长度固定,所以空间复杂度是O(1),满足题意。


标签:return,--,pos,char,int,哈希,字符串,Hash
From: https://blog.51cto.com/u_15899033/5903544

相关文章

  • 实验六
    实验四#include<iostream>#include<cassert>usingstd::cout;usingstd::endl;template<classT>classVector{public:Vector(intn,intm);Vector(i......
  • 为kafka配置SASL(简单认证安全)安全认证
    1.增加kafka_server_jaas.conf进入kafka的配置目录config:​​vimkafka_server_jaas.conf​​​​#增加如下内容:​​​​KafkaServer{​​​​org.apache.kafka.common.se......
  • kafka常用命令
    以下所有脚本需要在kafka安装目录的bin下执行1.创建topic:create_topic.sh​​.​​​​/kafka-topic​​​​.sh--create--zookeeperlocalhost:2181--replication-facto......
  • 使用systemctl启动kafka
    kafka依赖于zookeeper1.新建zookeeper配置文件:​​vim ​​​​/etc/systemd/system/zookeeper​​​​.service​​​​[Unit]​​​​Description=ApacheZookeeperserv......
  • vue2 数组18 some erver filter reduce axios
    some: return true是固定写法,终止some循环 erver: filter:   优化写法:arr.filter(item=>item.state).reduce((累加的结果,当前循环项)=>{},初始值)拿上......
  • ConConcurrentQueue Testing
    //ProvidesaC++11implementationofamulti-producer,multi-consumerlock-freequeue.//Anoverview,includingbenchmarkresults,isprovidedhere://http......
  • 反编译工具 Fernflower
    反编译.class文件工具Fernflower首先需要下载依赖包http://the.bytecode.club/fernflower.jar下载后,切换到文件当前目录,直接使用命令java-jarfernflower.jar目标......
  • 判断是不是完全二叉树
      图1,图2是完全二叉树 图3不是完全二叉树  import java.util.*;/* * public class TreeNode { *   int val = 0; *   TreeNode lef......
  • Everything 搜索工具的原理与实现
    Everything是通过操作USN实现的,并且有一定的局限性(只有NTFS下才能使用)。USNJournal相当于NTFS的秘书,为他记录下改动的一切,并储存为USN_RECORD的格式。原理是通......
  • 探究一种定长队列操作(C ,C++版本)
    一问题来源:南京烽火通信面试二问题:现有一种定长队列,长度为2的n次方,此队列可被多线程访问,但必须确保线程级安全,即在任意时刻,队列的长度保持不变。三笔者分析1.队列的存储......