栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

《C语言入门100例》(第18例)给定一个字符串,判定是否是C语言合法标识符 | ASCII 码的应用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《C语言入门100例》(第18例)给定一个字符串,判定是否是C语言合法标识符 | ASCII 码的应用

【第18题】给定一个字符串,判定是否是C语言合法标识符 | ASCII 码的应用

文章目录
    • 主要知识点
    • 习题
      • 1. Leetcode 面试题 01.01. 判定字符是否唯一
        • 题目描述
        • 初见
        • 代码
      • 2. Leetcode 剑指 Offer 50. 第一个只出现一次的字符
        • 题目描述
        • 初见
        • 代码
      • 3. Leetcode 383. 赎金信
        • 题目描述
        • 初见
        • 代码
    • 总结

主要知识点

字符的应用,ASCII 码的理解

习题 1. Leetcode 面试题 01.01. 判定字符是否唯一 题目描述

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

初见

确定字符串中的字符是否完全不同,即每个字符只出现一次。使用哈希表,遍历字符串统计字符数量,若某字符数量超过 1,则返回 false,否则返回 true:

代码
class Solution {
public:
    bool isUnique(string astr) {
        unordered_map cmap;
        for (auto ch: astr) {
            cmap[ch]++;
            if (cmap[ch] > 1) {
                return false;
            }
        }

        return true;
    }
};

当然,上面使用了额外的数据结构。由 ascii 码的特性,可以使用一个长度为 128 的数组做哈希操作;若题目明确说明字符串中只有字符,则可以用 int 中的每一位表示某个字母是否出现。

2. Leetcode 剑指 Offer 50. 第一个只出现一次的字符 题目描述

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

初见

由于 s 只包含小写字母,因此可以用长度为 26 的数组做哈希操作。遍历字符串统计字母出现次数后,再次遍历字符串从哈希表中查找字母出现次数,找到第一个出现次数为 1 的字母即为答案,否则返回空字符:

代码
class Solution {
public:
    char firstUniqChar(string s) {
        char result = ' ';
        int mCh[26]{0}; // 只包含小写字母
        for (auto ch: s) { // 构造哈希表
            mCh[ch - 'a']++;
        }

        for (auto ch: s) { // 找到第一个出现次数为 1 的字符
            if (mCh[ch - 'a'] == 1) {
                result = ch;
                break;
            }
        }

        return result;
    }
};
3. Leetcode 383. 赎金信 题目描述

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
提示:
1 <= ransomNote.length, magazine.length <= 105
ransomNote 和 magazine 由小写英文字母组成

初见

可以先遍历 magazine 构造字典,存储对应字符与可用数量。之后遍历 ransomNote 从字典中取出相应字符,当字典中字符可用数量不足(<0)时,返回 false,否则返回 true。由于两个字符串均只包含小写字母,因此与上一题一样,可以选择长度为 26 的数组做哈希操作:

代码
class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int mCmap[26]{0}; // 全为小写字母
        // 构造字典
        for (auto ch: magazine) {
            mCmap[ch - 'a']++;
        }

        // 从字典中取出相应字母
        for (auto ch: ransomNote) {
            mCmap[ch - 'a']--;
            if (mCmap[ch - 'a'] < 0) { // 字符数量不够则返回 false
                return false;
            }
        }

        return true;
    }
};
总结
  1. 经过 5 月训练,再看 C++ 入门有很多题目已经变简单了
  2. 中间暂时差的几个例题由于很简单,因此暂时不会补上
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879874.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号