确定字符互异

题目描述

请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。

给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。

测试样例:
"aeiou"
返回:True
"BarackObama"
返回:False
思路:使用一数组记录当前字符是否出现过。

1
class Different {
2
public:
3
    bool checkDifferent(string iniString) {
4
        decltype(iniString.size()) size = iniString.size();
5
        if (size==0 || size==1)
6
            return true;
7
        int dict[3000] = {0};
8
        for (decltype(size) i=0; i<size; ++i){
9
            if (dict[(int)iniString[i]]==1)
10
                return false;
11
            else 
12
                dict[(int)iniString[i]] = 1;
13
        }
14
        return true;
15
    }
16
};
您的代码已保存

要在 C++ 中实现一个算法来判断给定的字符串中的所有字符是否都是唯一的,并输出 "YES" 或者 "NO" 来表示结果,你可以按照下面的方式编写程序: ### 实现思路 1. **使用集合 (Set) 数据结构**:由于集合不允许重复元素存在,我们可以利用这一特性将字符串中的每个字符尝试加入到集合中。 - 如果某次插入操作失败了(即该字符已经在集合里),就说明遇到了重复字符; - 若遍历完整个字符串都没有遇到重复情况,则可以确定所有的字符都是唯一的。 2. **直接比较法**:对于每一个新读取进来的字符,在它之前的所有字符中进行查找是否有相同的字符;如果有则不是唯一,反之则是唯一的。这种方法的时间复杂度较高O(n^2),当数据量较大时不推荐采用此办法。 这里我们优先选择第一种基于 Set 的高效解决方案来进行编码实践。 ```cpp #include <iostream> #include <unordered_set> // 使用无序集合作为容器存储已访问过的字符 using namespace std; string checkUniqueChars(const string& inputStr) { unordered_set<char> charSet; // 定义一个空置的哈希表(无序集合) for(auto ch : inputStr){ if(charSet.find(ch)!=charSet.end()){ return "NO"; // 发现重复项立即返回 } else { charSet.insert(ch); // 插入当前处理的新字符至set内 } } return "YES"; // 遍历完成均未发现重复,则表明各字符互异 } int main() { string userInput; cout << "请输入需要检测的字符串(长度不超过100):" ; cin >> userInput; // 输入待验证的文本串 if(userInput.length()>100 || userInput.empty()){ cerr << "错误: 字符串长度超出限制或为空!" << endl; exit(EXIT_FAILURE); } cout << ((checkUniqueChars(userInput))=="YES"? "YES":"NO")<<endl; } ``` 上述代码片段展示了如何通过 `std::unordered_set` 检测输入字符串是否存在非独占性的字母组成,以此判定其内部各个符号间是否具备独特性质。如果全部检验完毕没有找到任何一个重复出现过的成分,最终便会给出肯定的答案——“YES”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值