某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。
给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。
输入:words = [“hello”,“leetcode”], order = “hlabcdefgijkmnopqrstuvwxyz”
输出:true 解释:在该语言的字母表中,‘h’ 位于 ‘l’ 之前,所以单词序列是按字典序排列的。
来源:LeetCode
其实思路很简单,就是先将order这个字符串中的字母转换成数组,每个数组元素来存储相对应的字母的索引:
例如index【h】=1,index【l】=2;
这样就只需要数组长度是26就可以了。
接下来就是比较连续两个字符串之间是否满足对应关系:由两个for循环来实现。
cur表示当前数组元素的第j位,pre表示其前一个字符串的第j位,比较cur和pre的大小:
cur>pre:说明当前字母符合顺序规范,还需要比较后面的,先给让flag为true,然后break。
cur>pre:直接返回false就好。
对于一些cur==pre的情况:如果第i个字符串的长度小于第i-1个字符串的长度:
比如“apple”,“app”,这种情况就是false,直接返回false即可,但是前提是得等前几个字母比较完成,所以这个判断应该放在第二个的for循环之外。
还有最后就是类似“app”,“apple”这种情况,一定会返回true,只要最后默认返回true即可。
class Solution {public boolean isAlienSorted(String[] words, String order) {boolean flag=false;int[] index = new int[26];//将order转换为index数组for(int i=0;iindex[order.charAt(i)-'a']=i;}//比较两个字符串之间的排序关系int len = words.length;for(int i=1;ifor(int j=0;jint cur = index[words[i].charAt(j)-'a'];int pre = index[words[i-1].charAt(j)-'a'];if(cur>pre){flag= true;break;}if(curreturn false;} }if(!flag&&words[i].length()return false;}}return true;}
}
上一篇:Linux 安装 Redis
下一篇:西电计组II 实验二