524. 通过删除字母匹配到字典里最长单词
题目要求
盲点:字典序
Java提供了比较字典序的方法。
返回的是差值。
相等返回0;
小于返回负数;
大于返回正数;
int compareTo(String anotherString);
dic.compareTo(res)<0 //代表dic的字典序小于res
class Solution {
/*
计算字典序 给字典赋值。字典序小
两个算法:一个是判断字符串是否为字典中的子串
计算长度
另外一个算法是计算该子串的字典序号
*/
public String findLongestWord(String s, List<String> dictionary) {
String res ="";
for(String dic:dictionary){
if(assertDic(s,dic)){
if(dic.length() > res.length()||(dic.length() == res.length()&&dic.compareTo(res)<0)){
res = dic;
}
}
}
return res;
}
/**
设计判断是否符合字典序
用两个指针比较
*/
public boolean assertDic(String s,String dir){
int dirlen = dir.length();
int slen = s.length();
int dirPointer = 0;
int sPointer = 0;
char[] scs = s.toCharArray();
char[] dircs = dir.toCharArray();
while(sPointer < slen&& dirPointer < dirlen){
// 如何设计退出机制
if(scs[sPointer]==dircs[dirPointer]){
dirPointer++;
}else{
sPointer++;
}
}
if(dirPointer == dirlen)return true;
return false;
}
}