zoukankan      html  css  js  c++  java
  • 524. 通过删除字母匹配到字典里最长单词

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

    示例 1:

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

    示例 2:

    输入:
    s = "abpcplea", d = ["a","b","c"]
    
    输出: 
    "a"

    说明:

    所有输入的字符串只包含小写字母。
    字典的大小不会超过 1000。
    所有输入的字符串长度不会超过 1000。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-word-in-dictionary-through-deleting

    思路:

    其实就是最长子序列,那就先判断一下是不是子序列,还是两个指针喽,如果长的字符串里面的能和短的里面的字符匹配的,也就是一样的,就给他计个数,如果匹配的数量和短的字符串的长度相等,那就是子序列了嘛。

    private boolean son(String s1, String s2){
            int i = 0, j = 0;
            while(i < s1.length() && j < s2.length()){
                if(s1.charAt(i) == s2.charAt(j)){
                    j++;
                }
                i++;
            }
            return j == s2.length();
        }

    判断了是不是子序列是第一步,还要考虑是不是最长对吧,如果一样长怎么办呢,那就考虑字典顺序对吧,定义个变量jilu记录一下最符合的值,有更符合的就更新一下对吧。看下代码,a>b那说明要找的最长子序列不是他,因为他比记录还短啊,要那么短小的就不行,那相等的时候呢,那比较字典顺序,字典顺序要最小对吧,所以compareTo函数他就来了,最后如果长度也符合,字典顺序也符合呢,那就行了呗?行个锤子,还不知道他是不是子序列呢,上面的函数哪来调用一下,结束。

    class Solution {
        public String findLongestWord(String s, List<String> d) {
            String jilu = "";
            for(String target : d){
                int a = jilu.length();
                int b = target.length();
                if(a > b || (a == b && jilu.compareTo(target) < 0)){
                    continue;
                }
                if(son(s,target) == true){
                    jilu = target;
                }
            }
            return jilu;
        }
        private boolean son(String s1, String s2){
            int i = 0, j = 0;
            while(i < s1.length() && j < s2.length()){
                if(s1.charAt(i) == s2.charAt(j)){
                    j++;
                }
                i++;
            }
            return j == s2.length();
        }
    }
    compareTo函数:
    • 如果参数字符串等于此字符串,则返回值 0;
    • 如果此字符串小于字符串参数,则返回一个小于 0 的值;
    • 如果此字符串大于字符串参数,则返回一个大于 0 的值。
  • 相关阅读:
    A1035
    A1005
    A1073
    A1061
    A1058
    A1027
    A1019
    Java 操作临时文件创建与删除
    面试必会之HashMap源码分析
    springboot整合cxf框架启动报错
  • 原文地址:https://www.cnblogs.com/zzxisgod/p/13335506.html
Copyright © 2011-2022 走看看