面试题 01.01. 判定字符是否唯一

news/2024/11/23 10:01:46/

判定字符是否唯一
实现一个算法,确定一个字符串 s s s 的所有字符是否全都不同。

示例 1:

输入: s = “leetcode”
输出: false
示例 2:

输入: s = “abc”
输出: true

限制:

0 <= len(s) <= 100
s[i]仅包含小写字母
如果你不使用额外的数据结构,会很加分。

题解1:

如果长度超过26,那么至少有一个字母出现过至少两次,直接判false即可。
最简单也最快想到的就是暴力,双循环, O ( n 2 ) O(n^2) O(n2)
C++

class Solution {
public:bool isUnique(string astr) {if(astr.size()>26)return false;for(int i=0;i<astr.size();i++)for(int j=i+1;j<astr.size();j++)if(astr[i]==astr[j])return false;return true;}
};

C

bool isUnique(char* astr){if(strlen(astr)>26)return false;for(int i=0;i<strlen(astr);i++)for(int j=i+1;j<strlen(astr);j++)if(astr[i]==astr[j])return false;return true;
}

题解2:

使用额外的布尔数组,记录是否出现过。时间复杂度 O ( n ) O(n) O(n),但空间复杂度增加了

C++

class Solution {
public:bool isUnique(string astr) {if(astr.size()>26)return false;bool b[26]={false};for(int i=0;i<astr.size();i++){if(b[astr[i]-'a'])return false;b[astr[i]-'a']=true;}return true;}
};

C

bool isUnique(char* astr){if(strlen(astr)>26)return false;bool b[26]={false};for(int i=0;i<strlen(astr);i++){if(b[astr[i]-'a'])return false;b[astr[i]-'a']=true;}return true;
}

题解3:

使用位运算,本来以为不用用任何额外的空间的,但没想出来。
看了一下题解,其实就是用int取代bool数组,但空间需求 2 16 2^{16} 216
C++

class Solution {
public:bool isUnique(string astr) {if(astr.size()>26)return false;int mark=0;for(int i=0;i<astr.size();i++){if(mark&(1<<(astr[i]-'a')))return false;else mark |= (1<<(astr[i]-'a'));}return true;}
};

C

bool isUnique(char* astr){if(strlen(astr)>26)return false;int mark=0;for(int i=0;i<strlen(astr);i++){if(mark&(1<<(astr[i]-'a')))return false;else mark |= (1<<(astr[i]-'a'));}return true;
}

题解4:

使用string的函数,找有没有相同的

class Solution {
public:bool isUnique(string astr) {if(astr.size()>26)return false;for(int i=0;i<astr.size();i++)if(astr.rfind(astr[i])!=i)return false;return true;}
};

题解5:

使用set代替bool数组,利用insert函数的返回值判断

class Solution {
public:bool isUnique(string astr) {if(astr.size()>26)return false;set<int>s;for(int i=0;i<astr.size();i++)if(s.insert(astr[i]).second==false)return false;return true;}
};

http://www.ppmy.cn/news/97628.html

相关文章

mysql错误码1045解决方案

用数据库连接工具访问提示 1045的错误码&#xff0c;在命令行输入mysql -u root –p&#xff0c;输入密码&#xff0c;经常出现下面的错误信息&#xff0c;相信该错误信息很多人在使用mysql时都遇到过。 ERROR 1045 (28000): Access denied for user rootlocalhost (using pas…

网站部署与上线(1)虚拟机

文章目录 .1 虚拟机简介2 虚拟机的安装 本章将搭建实例的生产环境&#xff0c;将所有的代码搭建在一台Linux服务器中&#xff0c;并且测试其能否正常运行。 使用远程服务器进行连接&#xff1b; 基本的Linux命令&#xff1b; 使用Nginx搭建Node.js服务器&#xff1b; 在服务器端…

3D项目中用到的一些算法

判断点是否在多边形内部&#xff08;冬奥&#xff09; &#xff08;1&#xff09;面积和判别法&#xff1a;判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形&#xff0c;相等则在多边形内部。 &#xff08;2&#xff09;夹角和判别法&#xff1a;判断目标点与所…

Oracle数据库从入门到精通系列之十:基于Docker部署Oracle数据库19c的详细步骤

Oracle数据库从入门到精通系列之十:基于Docker部署Oracle数据库19c的详细步骤 一、下载Oracle数据库19c镜像二、查看Oracle数据库19c的镜像三、创建Oracle数据库19c的数据目录四、启动Oracle19c数据库容器五、查看Oracle19c数据库容器启动日志六、查看密码修改脚本七、修改sys…

Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用(C#)

Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的Burst模式的技术背景Baumer工业相机使用BGAPISDK将设置Burst模式1.引用合适的类文件2.使用BGAPI SDK初始化相机设置Bur…

uni-app常用场景速查记录

记录一下uniapp开发过程中遇到的问题场景,方便后期查看. 1.elementUI中textarea文本如何设置换行显示 2.uniapp中实现文字滚动显示 3.下拉刷新和触底分页查询 1.elementUI中textarea文本设置换行显示 el-input标签中type为textarea中录入的文本内容,在表格中显示…

Prometheus之exporter详解

何为exporter Prometheus 监控基于一个很简单的模型: 主动抓取目标的指标接口(HTTP 协议)获取监控指标, 再存储到本地或远端的时序数据库. Prometheus 对于指标接口有一套固定的格式要求, 格式大致如下: # HELP http_requests_total The total number of HTTP requests. # TYPE…

【21】SCI易中期刊推荐——计算机科学人工智能领域(中科院4区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…