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

这篇具有很好参考价值的文章主要介绍了LeetCode 面试题 01.01. 判定字符是否唯一。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、题目

  实现一个算法,确定一个字符串 s 的所有字符是否全都不同,点击此处跳转。

示例 1:

输入: s = “leetcode”
输出: false

示例 2:

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

限制:

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

二、C# 题解

  使用数组记录出现次数,时间、空间复杂度均为 O ( n ) O(n) O(n)

public class Solution {
    public bool IsUnique(string astr) {
        int[] record = new int[26];              // 记录数组
        for (int i = 0; i < astr.Length; i++) {  // 遍历字符串
            int index = (int) (astr[i] - 'a');   // 得到每个字符在数组中对应的下标
            if (record[index] > 0) return false; // 出现,则返回 false
            else record[index]++;                // 未出现,则记录 + 1
        }
        return true;                             // 到此步,则返回 true
    }
}

  数组记录有些浪费内存空间了,因此使用位运算记录也可。因为题目要求是字符串内仅包含小写字母,因此只会出现26种不同的字符,使用 int 变量有 32 位长度,足以覆盖范围。

0000 0000 0000 0000 0000 0000 0000 0000 ↓ ′ c ′ 0000 0000 0000 0000 0000 0000 0000 0100 ↓ ′ g ′ 0000 0000 0000 0000 0000 0000 0100 0100 ↓ ′ a ′ 0000 0000 0000 0000 0000 0000 0100 0101 ↓ ′ c ′ 重复,返回 f a l s e 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000\\ ↓ 'c'\\ 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0100\\ ↓ 'g'\\ 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0100 \quad 0100\\ ↓ 'a'\\ 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0000 \quad 0100 \quad 0101\\ ↓ 'c'\\ 重复,返回 false 00000000000000000000000000000000c00000000000000000000000000000100g00000000000000000000000001000100a00000000000000000000000001000101c重复,返回false

  位运算记录的本质与上述数组记录类似,差别仅是内存使用。数组使用一个 int(32 位 bit)记录,而位运算使用 1 个 bit 记录,本质无区别。当然,运行速度会快些。

public class Solution {
    public bool IsUnique(string astr) {
        int record = 0;                              // 记录 int
        for (int i = 0; i < astr.Length; i++) {      // 遍历字符串
            int index = 1 << (int) (astr[i] - 'a');  // 得到每个字符在 int 中对应的 bit 位数
            if ((record & index) != 0) return false; // 与运算结果不为 0,则表示出现过
            else record |= index;                    // 未出现,则或运算记录下该字符
        }
        return true;                                 // 到此步,则返回 true
    }
}
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度:取决于出现字符的种类数目,此题为 O ( 1 ) O(1) O(1)

使用位运算的好处:

  • 满足题目要求;
  • 运行效率快些;
  • 锻炼编程能力。

坏处:文章来源地址https://www.toymoban.com/news/detail-652167.html

  • 处理字符种类有限:int 只能处理 32 种,long 只能处理 64 种;
  • 不易于读写与修改。

到了这里,关于LeetCode 面试题 01.01. 判定字符是否唯一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode 面试题 01.09. 字符串轮转

      字符串轮转。给定两个字符串 s1 和 s2 ,请编写代码检查 s2 是否为 s1 旋转而成(比如, waterbottle 是 erbottlewat 旋转后的字符串)。   点击此处跳转题目。 示例1: 输入:s1 = “waterbottle”, s2 = “erbottlewat” 输出:True 示例2: 输入:s1 = “aa”, s2 = “aba” 输出:False 提示:

    2024年02月11日
    浏览(42)
  • 【刷题】 leetcode 面试题 01.06 字符串压缩

    来看题目: 根据题目所说,我们需要完成函数书写,保证返回一个相对较小的字符数组: 如果压缩后比原字符串小,则返回压缩字符串,否则返回原字符串。 本思路一步一步操作,逐步完成任务 先确认字符串长度是否小于 2 ,小于直接返回( 因为压缩字符串长度至少是2

    2024年01月24日
    浏览(54)
  • 判定给定的字符序列是否为回文【数据结构】【栈】

    回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。写一个算法判定给定的字符序列是否为回文。(提示:将一半字符入栈)。 输出结果:    主要算法:    完整代码:             

    2024年02月07日
    浏览(40)
  • leetcode查找第一个唯一的字符

    链接: 查找第一个唯一的字符 因为本题要求的只有小写字母,可以利用数组来实现,将每个字母出现的次数都添加到对应的下标位置。下标为0的位置为字符a,下标为1的位置为字符b,已此类推。

    2024年02月11日
    浏览(60)
  • 【LeetCode】917. 仅仅反转字母、387. 字符串中的第一个唯一字符

     作者:小卢   专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》 目录  917. 仅仅反转字母  387. 字符串中的第一个唯一字符 917. 仅仅反转字母  题目描述: 给你一个字符串  s  ,根据下述规则反转

    2023年04月12日
    浏览(62)
  • 【前端面试3+1】12 toktn验证过程、面向对象特性、webpack和vite的区别、【字符串中的第一个唯一字符】

    用户登录:用户提供用户名和密码进行登录。 服务器验证:服务器接收到用户提供的用户名和密码,进行验证。 生成token:如果用户名和密码验证通过,服务器会生成一个token,通常包含一些加密的信息,如用户ID、过期时间等。 返回token:服务器将生成的token返回给客户端(

    2024年04月18日
    浏览(77)
  • LeetCode 面试题 01.08. 零矩阵

      编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。   点击此处跳转题目。 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示例 2: 输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ] 输出: [ [0,0,0,0], [0,4,5,0], [0,3,1,0] ]   此题有很多方法解,

    2024年02月11日
    浏览(43)
  • LeetCode 面试题 01.07. 旋转矩阵

      给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。   不占用额外内存空间能否做到?   点击此处跳转题目。 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示

    2024年02月11日
    浏览(53)
  • LeetCode 面试题 04.01. 节点间通路

      节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。   点击此处跳转题目。 示例1: 输入: n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2 输出: true 示例2: 输入: n = 5, graph = [[0, 1], [0, 2], [0, 4], [0, 4], [0, 1], [1, 3], [1, 4], [1, 3], [2, 3],

    2024年02月09日
    浏览(35)
  • leetcode 面试题 01.03. URL化

    🌟 leetcode链接:面试题 01.03. URL化 思路: 计算出空格的个数,我们可以知道最后一个字符的位置 endPos ,再从后 end 向前遍历若不是空格正常拷贝,是空格则替换成 %20 ,最终当空格替换完成的时候, endPos 和 end 两个下标会相遇。 代码:

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包