《剑指 Offer》专项突破版 - 面试题 34 : 外星语言是否排序(C++ 实现)

题目链接LCR 034. 验证外星语词典 - 力扣(LeetCode)

题目

有一门外星语言,它的字母表刚好包含所有的英文小写字母,只是字母表的顺序不同。给定一组单词和字母表顺序,请判断这些单词是否按照字母表的顺序排序。例如,输入一组单词 ["offer", "is", "coming"],以及字母表顺序 "zyxwvutsrqponmlkjihgfedcba",由于字母 'o' 在字母表中位于 'i' 的前面,因此单词 "offer" 排在 "is" 前面;同样,由于字母 'i' 在字母表中位于 'c' 的前面,因此单词 "is" 排在 "coming" 的前面。因此,这组单词是按照字母表顺序排序的,应该输出 true。

分析

首先分析如何按照常规字母表的顺序确定英文单词的顺序。例如,两个单词 "offer" 和 "often",它们前面的两个字母都是相同的,分别是 'o' 和 'f'。它们的第三个字母,一个是 'f',另一个是 't'。在常规字母表中,字母 'f' 的位置在 't' 的前面(即 'f' < 't'),因此,单词 "offer" 应该排在 "often" 的前面。

但目前字母表的顺序由一个输入的字符串决定。在确定单词排序的顺序时,它们的每个字母在该字母表中的顺序至关重要。为了方便查找每个字母在字母表中的顺序,可以创建一个哈希表,哈希表的键为字母表的每个字母,而值为字母在字母表中的顺序

由于字母表中的字母数目是固定的,总共 26 个,因此可以用一个长度为 26 的数组来模拟哈希表,数组的下标对应哈希表的键,而数组的值对应哈希表的值。

代码实现

cpp 复制代码
class Solution {
private:
    bool isSorted(const string& word1, const string& word2, const vector<int>& orderArr) {
        int i = 0;
        while (i < word1.size() && i < word2.size())
        {
            if (orderArr[word1[i] - 'a'] < orderArr[word2[i] - 'a'])
                return true;
            
            if (orderArr[word1[i] - 'a'] > orderArr[word2[i] - 'a'])
                return false;
            
            ++i;
        }
        return i == word1.size();
    }
​
public:
    bool isAlienSorted(vector<string>& words, string order) {
        vector<int> orderArr(26, 0);  // 用数组模拟哈希表
        for (int i = 0; i < order.size(); ++i)
        {
            orderArr[order[i] - 'a'] = i;
        }
​
        for (int i = 0; i < words.size() - 1; ++i)
        {
            if (!isSorted(words[i], words[i + 1], orderArr))
                return false;
        }
        return true;
    }
};
相关推荐
前路不黑暗@2 分钟前
C语言:操作符详解(二)
c语言·开发语言·经验分享·笔记·学习·学习方法·visual studio
强德亨上校17 分钟前
贪心算法(Greedy Algorithm)详解
算法·贪心算法
深盾科技1 小时前
Kotlin Data Classes 快速上手
android·开发语言·kotlin
zzywxc7871 小时前
详细探讨AI在金融、医疗、教育和制造业四大领域的具体落地案例,并通过代码、流程图、Prompt示例和图表等方式展示这些应用的实际效果。
开发语言·javascript·人工智能·深度学习·金融·prompt·流程图
浮灯Foden1 小时前
算法-每日一题(DAY13)两数之和
开发语言·数据结构·c++·算法·leetcode·面试·散列表
淡海水2 小时前
【原理】Struct 和 Class 辨析
开发语言·c++·c#·struct·class
Q_Q19632884752 小时前
python的电影院座位管理可视化数据分析系统
开发语言·spring boot·python·django·flask·node.js·php
杜子不疼.2 小时前
《Python学习之第三方库:开启无限可能》
开发语言·python·学习
西工程小巴2 小时前
实践笔记-VSCode与IDE同步问题解决指南;程序总是进入中断服务程序。
c语言·算法·嵌入式
Tina学编程2 小时前
48Days-Day19 | ISBN号,kotori和迷宫,矩阵最长递增路径
java·算法