剑指offer--13题
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- void FirstNoRepeatCh(const char str[], char& ch);
- int main(int argc, char* argv[])
- {
- const char* str = "cdceasafggsfrrtkkxx";
- char ch = '@';
- FirstNoRepeatCh(str,ch);
- if(ch == '@')
- cout<<"No Find!"<<endl;
- else
- cout<<ch<<endl;
- return 0;
- }
- //自己编写,即第一种思路
- /*void FirstNoRepeatCh(const char str[], char& ch)
- {
- int HashTable[256] = {0};
- while(*str != '\0')
- {
- if(HashTable[*str] == 0) //用Hash表(哈希表)来判断字符是否重复出现
- {
- char* pch = (char*)(str+1);
- bool chFind = false;
- while(*pch != '\0' && !chFind)
- {
- if(*str == *pch)
- chFind = true;
- pch++;
- }
- if(chFind)
- HashTable[*str] = 1;
- else
- {
- ch = *str;
- break;
- }
- }
- str++;
- }
- }*/
- //此为第二种思路+自己编写
- void FirstNoRepeatCh(const char str[], char& ch)
- {
- if(!str)
- return;
- const int TableSize = 256;
- int HashTable[TableSize] = {0};
- char* pch = (char*)str;
- while(*str != '\0')
- {
- HashTable[*str]++;
- str++;
- }
- bool chFind = false;
- while(*pch != '\0' && !chFind)
- {
- if(HashTable[*pch] == 1)
- {
- ch = *pch;
- chFind = true;
- }
- pch++;
- }
- }
- /*//标准答案
- ///////////////////////////////////////////////////////////////////////
- // Find the first char which appears only once in a string
- // Input: pString - the string
- // Output: the first not repeating char if the string has, otherwise 0
- ///////////////////////////////////////////////////////////////////////
- char FirstNotRepeatingChar(char* pString)
- {
- // invalid input
- if(!pString)
- return 0; //因为涉及指针,所以判空
- // get a hash table, and initialize it
- const int tableSize = 256; //最好用const int
- unsigned int hashTable[tableSize];
- for(unsigned int i = 0; i < tableSize; ++ i)
- hashTable[i] = 0;
- // get the how many times each char appears in the string
- char* pHashKey = pString;
- while(*(pHashKey) != '\0')
- hashTable[*(pHashKey++)] ++;
- // find the first char which appears only once in a string
- pHashKey = pString;
- while(*pHashKey != '\0')
- {
- if(hashTable[*pHashKey] == 1)
- return *pHashKey;
- pHashKey++;
- }
- // if the string is empty
- // or every char in the string appears at least twice
- return 0;
- } */
- //注意:根据评论可知,若第二次遍历Hash表,则会得到仅出现一次的最小字符
剑指offer--13题的更多相关文章
- 剑指offer刷题
1.面试题43. 1-n整数中1出现的次数 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次 ...
- 剑指 offer 第一题: 二维数组中的查找
打算写 图解剑指 offer 66 题 的系列文章,不知道大家有没有兴趣
- 剑指Offer编程题2——替换空格
剑指Offer编程题2——替换空格 题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happ ...
- 剑指Offer编程题1——二维数组中的查找
剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...
- 剑指 Offer 13. 机器人的运动范围 + 深搜 + 递归
剑指 Offer 13. 机器人的运动范围 题目链接 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2020/12/ ...
- 剑指 Offer 13. 机器人的运动范围
剑指 Offer 13. 机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一 ...
- 剑指offer编程题Java实现——面试题13在O(1)时间内删除链表节点
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点. 由于给定的是单向链表,正常删除链表的时间复杂度是查找链表的时间复杂度即O(n),如果要求在O(1)时间复杂度内删除节点 ...
- 剑指offer(13)-栈的压入、弹出序列 九度1366
题目来自剑指offer系列 九度 1366:http://ac.jobdu.com/problem.php?pid=1367 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列 ...
- 牛客网剑指offer刷题总结
二维数组中的查找: 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 两 ...
- LeetCode剑指Offer刷题总结(一)
LeetCode过程中值得反思的细节 以下题号均指LeetCode剑指offer题库中的题号 本文章将每周定期更新,当内容达到10题左右时将会开下一节. 二维数组越界问题04 public stati ...
随机推荐
- android任意view爆炸效果--第三方开源--ExplosionField
犹如天女散花一样,爆炸散列,比较有趣.Android ExplosionField在github上的项目主页是:https://github.com/tyrantgit/ExplosionField ...
- ContactsContract.CommonDataKinds【Translated By KillerLegend】
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.html interf ...
- js中关于prototype学习(2015年1月5号晚)
prototype在js中为原型,只要是对象都有原型,最高原型为Object. 函数作为一特殊的对象,下面探讨prototype(原型)和function(函数)之间的关系. function A ( ...
- DELPHI 使用dbexpress控件连接MySQL数据库方法
1. 在窗体上放置4个控件: SQLConnection1,SimpleDataSet1,DataSource1,DBGrid (注意: 如果 出现"Operation not allowe ...
- Keil的使用方法 - 常用功能(二)
Ⅰ.概述 上一篇文章是总结关于Keil使用方法-常用功能(一),关于(文件和编译)工具栏每一个按钮的功能描述和快捷键的使用. 我将每一篇Keil使用方法的文章都汇总在一起,回顾前面的总结请点击下面的链 ...
- python时间-time模块
time是python自带的模块,用于处理时间问题,提供了一系列的操作时间的函数. 以下说明针对于 python2.7,其他版本可能有所差异. 模块提供了两个种表示时间的格式: 1.时间戳,是以秒表示 ...
- android开发系列之git常用命令
最近因为跳槽到新公司,然后新公司里面的代码管理工具是gitLab,所以我想在这篇博客里面整理一下git常用的语法. GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托 ...
- SQL Server 2008 表变量参数(表值参数)用法
表值参数是 SQL Server 2008 中的新参数类型.表值参数是使用用户定义的表类型来声明的.使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程 ...
- 在C#使用文件监控对象FileSystemWatcher的几种方案
最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给web服务 ...
- iOS学习之C语言内存管理
一.存储区划分 按照地址从高到低的顺序:栈区,堆区,静态区,常量区,代码区 1.栈区:局部变量的存储区域 局部变量基本都在函数.循环.分支中定义 栈区的内存空 ...