【每日一题 | 24.10.6】确定字符串是否包含唯一字符

在这里插入图片描述
在这里插入图片描述

个人主页:C_GUIQU
归属专栏:每日一题

1. 题目

确定字符串是否包含唯一字符
在这里插入图片描述

2. 解题思路

题目要求:判断输入的字符串是否唯一,这里想到可以借助布尔数组。

第一步:忽略字母大小写
可以将输入字符串全部转换为小写或大写,在这里我们采用全部转换为小写,C++中采用tolower(),Java中采用input.tolowerCase()。

第二步:初始化标记数组
创建一个布尔数组作为标记数组(seen),因为ASCII字符码表一共有256个,所以数组大小应为256,每个字符的ACSII作为数组索引,记录每个字符是否已经出现过,若字符已经出现,则对应的seen索引为true。

第三步:遍历字符串,检查是否有重复字符
遍历已转换为小写的输入字符,如果seen数组值为false(此字符没有出现过),将其设置为true,表示已经出现过;如果seen数组值为true(此字符出现过),直接返回“NO”,遍历结束后未发现重复字符,返回“YES”。
在这里插入图片描述

3. 代码实现(AC_Code)

  • C++
#include <iostream>
#include <string>

using namespace std;

string isUnique(const string& input)   //是否唯一函数,返回字符串类型,input值不改变,引用效率高
{
    bool seen[256] = { false };   // 字符全部初始化为false

    for(char ch : input)   // 集合遍历
    {
        char lowerCh = tolower(ch);   //将字符全部转换为小写,以忽略大小写差异
        if(seen[lowerCh])   // 判断字符是否出现
            return "NO";
        seen[lowerCh] = true;   // 将字符标记为已出现
    }
    
    return "YES";   // 字符唯一
}

int main()
{
    string input;
    //cin >> input;
    getline(cin,input);   // 输入字符串,不受空格影响,取整行输入,读取范围比cin更广泛
    cout << isUnique(input) << endl;

    return 0;
}
  • Java
import java.util.Scanner;

public class Main {
    public static String isUnique(String input) {
        boolean[] seen = new boolean[256];
        input = input.toLowerCase();

        for (char ch  : input.toCharArray()) {
            if(seen[ch])
                return "NO";
            seen[ch] = true;
        }
        return "YES";
    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String input = scan.nextLine();

        System.out.println(isUnique(input));

        scan.close();
    }
}

最后,感谢您的阅读,期待您的一键三连!
在这里插入图片描述

评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值