Believing Process 力扣524. 通过删除字母匹配到字典里最长单词

题干:

给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。

如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。

public class 通过删除字母匹配到字典里最长单词 {
    public static void main(String[] args) {
        String s = "abpcplea";
        List<String> dictionary = new ArrayList<String>();
        dictionary.add("ale");
        dictionary.add("apple");
        dictionary.add("monkey");
        dictionary.add("ple");

        System.out.println(findLongestWord(s,dictionary));
    }
    public static String findLongestWord(String s, List<String> dictionary) {
        String LongestWord = "";
        for(String target:dictionary){
            int l1 = LongestWord.length(),l2=target.length();
            if(l1>l2||(l1==l2&&LongestWord.compareTo(target)<0))
                continue;
            if(isSubStr(s,target))
                LongestWord = target;
        }
        return  LongestWord;
    }
    public static boolean isSubStr(String s, String target){
        int i=0,j=0;
        while(i<s.length()&&j<target.length()){
            if(s.charAt(i)==target.charAt(j)){
                j++;
            }
            i++;
        }
        return j==target.length();
    }
}

 辅助函数isSubStr()用于判断字典中的字符串是否为给定字符串通过删除字符可得到的子串。While循环内是一个双指针判断字符是否相同,若当前字符不同,继续遍历给定字符串指针,字典中字符串指针不动,因为只需要知道字典中的字符串是否为给定字符串通过删除字符可得到的子串。

findLongestWord()函数遍历字典中各字符串(即目标字符串),先判断目标字符串的长度是否小于候选最长子串的长度,如果比候选最长子串的长度还小,那都不需要去判断目标字符串是否为给定字符串的子串了,直接pass掉,还有一点要注意,因为题干要求在长度相同时返回字典序最小的字符串,所以用compareTo去比较当目标字符串与候选最长子串长度相同时,候选最长字符串与给定字符串的字典序,如果目标字符串的字典序大于候选最长子串,则直接pass掉目标字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值