首页 > 其他分享 > 判定字符是否唯一

判定字符是否唯一

时间:2023-06-29 14:34:16浏览次数:32  
标签:字符 return string mask isUnique 唯一 判定 false astr

题目描述

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

示例 1:

输入: s = "leetcode"
输出: false 

示例 2:

输入: s = "abc"
输出: true

限制:

  • 0 <= len(s) <= 100
  • 如果你不使用额外的数据结构,会很加分。

解法

方法一:位运算

根据示例,可以假定字符串中只包含小写字母(实际验证,也符合假设)。

因此,我们可以使用一个 \(32\) 位整数 mask 的每一位来表示字符串中的每一个字符是否出现过。

时间复杂度 \(O(n)\),空间复杂度 \(O(1)\)。其中 \(n\) 为字符串长度。

Python3

class Solution:
    def isUnique(self, astr: str) -> bool:
        mask = 0
        for c in astr:
            i = ord(c) - ord('a')
            if (mask >> i) & 1:
                return False
            mask |= 1 << i
        return True

Java

class Solution {
    public boolean isUnique(String astr) {
        int mask = 0;
        for (char c : astr.toCharArray()) {
            int i = c - 'a';
            if (((mask >> i) & 1) == 1) {
                return false;
            }
            mask |= 1 << i;
        }
        return true;
    }
}

C++

class Solution {
public:
    bool isUnique(string astr) {
        int mask = 0;
        for (char c : astr) {
            int i = c - 'a';
            if (mask >> i & 1) {
                return false;
            }
            mask |= 1 << i;
        }
        return true;
    }
};

Go

func isUnique(astr string) bool {
	mask := 0
	for _, c := range astr {
		i := c - 'a'
		if mask>>i&1 == 1 {
			return false
		}
		mask |= 1 << i
	}
	return true
}

JavaScript

/**
 * @param {string} astr
 * @return {boolean}
 */
var isUnique = function (astr) {
    let mask = 0;
    for (const c of astr) {
        const i = c.charCodeAt() - 'a'.charCodeAt();
        if ((mask >> i) & 1) {
            return false;
        }
        mask |= 1 << i;
    }
    return true;
};

TypeScript

function isUnique(astr: string): boolean {
    let mask = 0;
    for (let j = 0; j < astr.length; ++j) {
        const i = astr.charCodeAt(j) - 'a'.charCodeAt(0);
        if ((mask >> i) & 1) {
            return false;
        }
        mask |= 1 << i;
    }
    return true;
}

...


标签:字符,return,string,mask,isUnique,唯一,判定,false,astr
From: https://www.cnblogs.com/mcfon/p/17514146.html

相关文章

  • 论文阅读: (CVPR2023 SDT )基于书写者风格和字符风格解耦的手写文字生成及源码对应
    引言许久不认真看论文了,这不赶紧捡起来。这也是自己看的第一篇用到Transformer结构的CV论文。之所以选择这篇文章来看,是考虑到之前做过手写字体生成的项目。这个工作可以用来合成一些手写体数据集,用来辅助手写体识别模型的训练。本篇文章将从论文与代码一一对应解析的方式来撰......
  • python题目:使用python将指定字符串如:"aabbc"中的"ab"串删除,删除过后的数据为:c【杭州多
    定义一个函数,在函数体内完成以下逻辑:使用python将指定字符串如:"aabbc"中的"ab"串删除,删除过后的数据为:cimportsyssys.setrecursionlimit(100000)#设置递归的深度为10万defdel1(str1):#str1='aabbc'while"ab"notinstr1:print(str1)exi......
  • 【剑指Offer】27、字符串的排列
    【剑指Offer】27、字符串的排列题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解......
  • HTML特殊字符符号大全
    HTML特殊字符符号大全:只要你认识了HTML标记,你便会知道特殊字符的用处。常用特殊符号:HTML原代码显示结果描述<<小于号或显示标记>>大于号或显示标记&amp;&可用于显示其它特殊字符"“引号&reg;®已注册&copy;©版权&trade;™商标&......
  • 2023-06-28:你想要用小写字母组成一个目标字符串 target。 开始的时候,序列由 target.le
    2023-06-28:你想要用小写字母组成一个目标字符串target。开始的时候,序列由target.length个'?'记号组成而你有一个小写字母印章stamp。在每个回合,你可以将印章放在序列上,并将序列中的每个字母替换为印章上的相应字母你最多可以进行10*target.length个回合举个例子,如......
  • 2023-06-28:你想要用小写字母组成一个目标字符串 target。 开始的时候,序列由 target.le
    2023-06-28:你想要用小写字母组成一个目标字符串target。开始的时候,序列由target.length个'?'记号组成而你有一个小写字母印章stamp。在每个回合,你可以将印章放在序列上,并将序列中的每个字母替换为印章上的相应字母你最多可以进行10*target.length个回合举个例子,如果初始......
  • uva 10878(字符串)
    题目:"Machinestakemebysurprisewithgreatfrequency."AlanTuringYourbosshasjustunearthedarollofoldcomputertapes.Thetapeshaveholesinthemandmightcontainsomesortofusefulinformation.Itfallstoyoutofigureoutwhatisw......
  • php php截取指定两个字符之间字符串,默认字符集为utf-8
    /**php截取指定两个字符之间字符串,默认字符集为utf-8Powerby大耳朵图图@paramstring$begin开始字符串@paramstring$end结束字符串@paramstring$str需要截取的字符串@returnstring*/publicfunctioncut($begin,$end,$str){$b=mb_strpos($str,$begin)+mb......
  • JavaScript-常用字符串方法和属性
    JavaScript-常用字符串方法和属性charAt()//返回指定位置处的字符。charCodeAt()//返回指定位置处字符编码。codePointAt()//返回字符串中索引(位置)处的Unicode值。concat()//返回两个或多个连接的字符串。constructor返回字符串的构造函数。endsWith()//返回......
  • React学习时,outlet配置(token判定,页面path监听)
    尽管写过outlet路由的配置。考虑到token判定和路由页变更,我不了解v6是不是有更详解的做法。决定调一下配置,期望在任何页面异步更新时,token都可以在跳转前被检测到,防止无token跳转发生。为src文件配置v6版本:路由子组件App.jsimport{HashRouter,Routes,Ro......