【程序员面试金典】面试题 01.01. 判定字符是否唯一

文章介绍了两种方法判断字符串中的字符是否全部不同:一种是使用unordered_set,遍历字符串并检查元素是否存在;另一种是使用两层循环进行逐个比较,不依赖额外数据结构。这两种方法分别对应使用和不使用额外数据结构的情况。
摘要由CSDN通过智能技术生成

【程序员面试金典】面试题 01.01. 判定字符是否唯一

题目描述

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

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

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

解题思路

思路1:最直观的想法是,使用uset,遍历一遍字符串s,如果当前元素s[i]在uset中找到,则直接返回false,反之将s[i]插入uset中,如果遍历结束都没找到,则表明字符串中无重复元素,则返回true。

    bool isUnique(string astr) {
        int n=astr.size();
        unordered_set<int> uset;
        for(int i=0;i<n;i++)
        {
            if(uset.find(astr[i])!=uset.end())
                return false;
            else
                uset.emplace(astr[i]);
        }
        return true;
    }

思路2:题目中表明,如果不使用额外的数据结构,那么我们就要从哈希法转换到最初的两层循环上。外层循环表示当前元素,内层循环表示从当前元素后一个元素开始的剩余元素,每一轮如此比较,如果存在相同则返回false,反之如果两层循环遍历结束都没找到,则表明字符串中无重复元素,则返回true。

    bool isUnique(string astr) {
        int n=astr.size();
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                if(astr[i]==astr[j])
                    return false;
            }
        }
        return true;
    }

总结:有时候一题多解,要按照题目要求来进行求解。有时候在题目训练下,我们解题往往趋于最优化,但有时最优化不一定是我们的题目要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值