永久免费自动建站系统,网站建设哪家信誉好,fqapps com网站怎么做,网络营销比较成功的企业LCR 034. 验证外星语词典
某种外星语也使用英文小写字母#xff0c;但可能顺序 order 不同。字母表的顺序#xff08;order#xff09;是一些小写字母的排列。
给定一组用外星语书写的单词 words#xff0c;以及其字母表的顺序 order#xff0c;只有当给定的单词在这种外…LCR 034. 验证外星语词典
某种外星语也使用英文小写字母但可能顺序 order 不同。字母表的顺序order是一些小写字母的排列。
给定一组用外星语书写的单词 words以及其字母表的顺序 order只有当给定的单词在这种外星语中按字典序排列时返回 true否则返回 false。 示例 1 输入words [“hello”,“leetcode”], order “hlabcdefgijkmnopqrstuvwxyz” 输出true 解释在该语言的字母表中‘h’ 位于 ‘l’ 之前所以单词序列是按字典序排列的。 示例 2 输入words [“word”,“world”,“row”], order “worldabcefghijkmnpqstuvxyz” 输出false 解释在该语言的字母表中‘d’ 位于 ‘l’ 之后那么 words[0] words[1]因此单词序列不是按字典序排列的。 示例 3 输入words [“apple”,“app”], order “abcdefghijklmnopqrstuvwxyz” 输出false 解释当前三个字符 “app” 匹配时第二个字符串相对短一些然后根据词典编纂规则 “apple” “app”因为 ‘l’ ‘∅’其中 ‘∅’ 是空白字符定义为比任何其他字符都小更多信息。 提示 1 words.length 100 1 words[i].length 20 order.length 26 在 words[i] 和 order 中的所有字符都是英文小写字母。 题解 本题我们还是以数组形式常规创建hash映射区别为hash数组元素对应的值我们选用字母在所给order字符串中的顺序以此作为优先级 因此在比较两字符串时我们转码为数字形式进行优先级比对即可 代码
class Solution {public boolean isAlienSorted(String[] words, String order) {int hash[] new int[26];for(int i0;iorder.length();i){char tmp order.charAt(i);hash[tmp - a] i1;}if(words.length 1)return true;for(int i1;iwords.length;i){String left words[i-1];String right words[i];// 利用哈希数组将字符转码为数字利用数字比较// 因数字较大超过10不可直接利用十进制数大小直接比较boolean flag charToNum(left,right,hash);// flag为每次比较的结果而我们要的是总的比较结果if(!flag){return false;}}return true;}public boolean charToNum(String l ,String r ,int[] hash){int llen l.length();int rlen r.length();int lnum[] new int[llen];int rnum[] new int[rlen];for(int i0;illen;i){lnum[i] hash[l.charAt(i) - a];}for(int i0;irlen;i){rnum[i] hash[r.charAt(i) - a];}for(int i0;illen irlen;i){// 注意审题是只要两个单词之间出现大于的字符即算成功而不是要求两个单词之间每对都为大于关系if(lnum[i] rnum[i])return true;else if(lnum[i] rnum[i])return false;}if(llen rlen || llen rlen)return true;return false;}
}结果