LeetCode524删除字母匹配最长单词

题目:

给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。

示例 1:

输入:
s = "abpcplea", d = ["ale","apple","monkey","plea"]

输出: 
"apple"

思路:一个字符串s通过删除得到另一个字符串a,则a就为s的一个子序列,本题的思路就在此

遍历字典数组里面的字符串,然后筛选出是s的子序列,且长度最长,字典序最小,用一个临时字符串longword遍历接收,

 public String findLongestWord(String s, List<String> d) {
        if(s==null||s.length()==0){
            return "";
        }
        if(d.size()<=0){
            return "";
        }
        //思路:精髓是判断一个字符串是否是另一个字符串的子序列
        //1.遍历字符串字典数组,得到里面的每一个字符串,然后判断是否是给定的字符串的子序列,
        String longword="";
        for(String target:d){
            int l1=longword.length(),l2=target.length();
            //这里面还要判断是否是按字典序进行排序的,如果longword的字典序在target的前面,舍弃target这个字符串
            //因为是要target种最长的且字典序是最小的
            if(l2<l1){//如果target小于最长单词的长度,丢弃
                continue;
            }
             //长度相同,要字典序最小的
            if(l1==l2&&longword.compareTo(target)<0){
                continue;
            }
            if(isSubstr(s,target)){
                longword=target;
            }
        }
        return longword;
        //如果是用一个临时字符串接收
        
    }
    //判断一个字符串是否是另一个字符的子序列
    //这里指的是target是否是s的一个子序列
    public 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();
    }

注意,长度相等的情况下,选择字典序最小的字符串

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值