1、定义一个函数,删除字符串中所有重复出现的字符,例如输入“google”,删除重复的字符之后的结果为“gole”。

解题思路:像这种求字符串的重复字符,并且去掉重复字符,我们一般可以用哈希表来解决,时间复杂度一般为o(n),后面我将列举三个非常明显的例子用哈希表来解决。

首先上段代码:void pSizePath(const char* inputStr,char* outputStr),其中inputStr为输入的字符串,outputStr为删除重复字符之后的字符串。

  1. void pSizePath(const char* inputStr,char* outputStr)
  2. {
  3. const unsigned int number=256;
  4. unsigned int hashTable[number];
  5. const char* hashKey=inputStr;
  6. for (unsigned int i = 0; i < number; i++)
  7. {
  8. hashTable[i]=0; //初始化哈希表
  9. }
  10. while (*hashKey!='\0')
  11. {
  12. hashTable[*hashKey]++; //表中出现的次数
  13. hashKey++;
  14. }
  15. hashKey=inputStr; //重新遍历一遍
  16. while (*hashKey!='\0')
  17. {
  18. if (hashTable[*hashKey]==1) //只出现一次就保存一次
  19. {
  20. *(outputStr++)=*hashKey;
  21. }
  22. else if (hashTable[*hashKey]>1) //出现两次就保存刚出现的第一次
  23. {
  24. *(outputStr++)=*hashKey;
  25. hashTable[*hashKey]=0; //这里设置为0,以后都不会判断这个字符了。
  26. }
  27. hashKey++;
  28. }
  29. *outputStr='\0'; //字符串结束标志
  30. }

  2、定义一个函数,输入两个字符串,从第一个字符串中删除在第二个字符串中出现的所有字符串。例如从第一个字符串“we are students."中删除在第二个字符串串中”aeiou“中出现过的字符得到的结果是”w r Stdents."

解题思路:思路还是和上题一样,用哈希表来解决,只不过是我们保存字符串的时候需要额外一个字符串指针来储存。即快慢指针,这种解决方法非常巧妙。

pSizePath(const char* inputStr1,const char* inputStr2,char* outputStr)函数中inputStr1为哈希表中的key值,inputStr2指向输入的字符串,outputStr指针指向输出字符串。

  1. void pSizePath(const char* inputStr1,const char* inputStr2,char* outputStr)
  2. {
  3. const int number=256;
  4. int hashTable[number];
  5. const char* hashKey=inputStr1;
  6. for (int i = 0; i < number; i++)
  7. {
  8. hashTable[i]=0; //初始化哈希表
  9. }
  10. while (*hashKey!='\0')
  11. {
  12. hashTable[*hashKey]++; //表中出现的次数
  13. hashKey++;
  14. }
  15. char* outputStr1=outputStr;
  16. while (*inputStr2!='\0')
  17. {
  18. if (!(hashTable[*inputStr2]>=1)) //出现大于或等于一次的不显示
  19. {
  20. *(outputStr1++)=*inputStr2;
  21.  
  22. }
  23. inputStr2++ ;
  24. }
  25. *outputStr1='\0'; //字符串结束标志
  26. }

  经过测试可行。

作者:曹麒文

出处:http://www.cnblogs.com/master-image/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

剑指offer课外两道习题解法的更多相关文章

  1. 剑指 Offer 52. 两个链表的第一个公共节点 + 链表 + 第一个公共结点 + 双指针

    剑指 Offer 52. 两个链表的第一个公共节点 Offer_52 题目详情 题解分析 可以使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结 ...

  2. 力扣 - 剑指 Offer 52. 两个链表的第一个公共节点

    题目 剑指 Offer 52. 两个链表的第一个公共节点 思路1(栈) 若两个链表相遇,则从它开始相遇的地方到链表末尾应该都是相同的,那么我们可以将两个链表分别放入两个栈中,然后依次循环比较两个栈顶的 ...

  3. 【Java】 剑指offer(52) 两个链表的第一个公共结点

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入两个链表,找出它们的第一个公共结点. 思路 蛮力法:遍历第一个 ...

  4. 剑指offer——树中两个节点的最低公共祖先

    代码来源与<剑指offer> 得到从根节点开始到输入的两个结点的两条,需要遍历两次树,每遍历一次的时间复杂度是O(n),得到的两条路径的长度在最差情况时是O(n),通常情况下两条路径的长度 ...

  5. Go语言实现:【剑指offer】两个链表的第一个公共结点

    该题目来源于牛客网<剑指offer>专题. 输入两个链表,找出它们的第一个公共结点. Go语言实现: //长度长的先走个长度差,然后ab一起比较后面结点 //长度一样,公共结点可能在首结点 ...

  6. 《剑指offer》两个链表中的第一个公共节点

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:

  7. 「剑指offer」27道Mybatis面试题含解析

    1.什么是Mybatis? Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement等繁杂 ...

  8. 剑指offer:两个链表的第一个公共结点

    题目描述: 输入两个链表,找出它们的第一个公共结点. 解题思路: 这道题一开始的题意不太理解,这里的公共结点,实际上指结点指相同,在题目不存在结点值相同的不同结点. 1. 最直接的思路是对链表一的每个 ...

  9. 剑指Offer 合并两个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.   思路: 用2个新节点,一个用来存放新链表的头节点,另一个用来移动.当p1,p2有一个到尾部的 ...

随机推荐

  1. VS2008 查找失效怎么办

    按Ctrl+F没有反应?   visual studio 里 查找替换 显示不出来;   还能用 让他查找个不存在的文本还会弹出找不到的提示; 就是看不到 查找替换的操作框了;   问题解决方法:   ...

  2. MySQL 之 导出导入数据

    导出数据库(sql脚本)  mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u root -p --databases db_name > test ...

  3. HDU - 6383 百度之星2018初赛B 1004 p1m2(二分答案)

    p1m2  Accepts: 1003  Submissions: 4595  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 131072 ...

  4. py-kms使用方法

    搭建py-kms服务器,先下载py-kms https://github.com/myanaloglife/py-kms 启动py-kms服务(需要服务器安装有python): python serv ...

  5. CentOS软件包管理

    rpm安装包管理 指令 说明 rpm -i XX.rpm 安装XX.rpm软件包 rpm -qa XX 查看XX软件包安装的所有文件 rpm -e XX 卸载XX软件包 yum管理软件 指令 说明 y ...

  6. 51nod1109(bfs)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1109 题意:中文题诶- 思路:可以用二叉树构建,根节点为 1, ...

  7. 能量项链 洛谷P1063

    1154 能量项链 2006年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 在Mars星球上,每个M ...

  8. 分享| 语义SLAM的未来与思考(泡泡机器人)

    相比典型的点云地图,语义地图能够很好的表示出机器人到的地方是什么,机器人“看”到的东西是什么.比如进入到一个房间,点云地图中,机器人并不能识别显示出来的一块块的点云到底是什么,但是语义地图的构建可以分 ...

  9. PAT甲级——1105 Spiral Matrix (螺旋矩阵)

    此文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90484058 1105 Spiral Matrix (25 分) ...

  10. iphone状态栏,导航栏,标签栏高度一览表

    iphone状态栏,导航栏,标签栏高度一览表   设备分辨率 状态栏高度 导航栏高度 标签栏高度 iPhone6 plus  1242×2208 px 60px  132px  147px iPhon ...