给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。
如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。
示例 1:
输入:s = “abpcplea”, dictionary = [“ale”,”apple”,”monkey”,”plea”]
输出:”apple”
示例 2:
输入:s = “abpcplea”, dictionary = [“a”,”b”,”c”]
输出:”a”
class Solution {/**思路:(1)拿字典表中的字符串,分别和s做对比,当遇到匹配的元素的时候,就把s和从dictionary中正在对比的字符串遍历位置都右移一个位置(2)如果没有匹配,就右移动s的字符串位置(3)当字典或者s跑到右边界,停止,这个时候如果匹配到,那么说明字典字符串的遍历位置刚好是字典字符串的长度*/public String findLongestWord(String s, List<String> dictionary) {String storeString = "";// 对字典表进行遍历for(String target : dictionary){// 对比当前找到的字符串是不是最长// 即长度是不是最长,如果长度相等,那么ascii码是不是是否更大?// 如果是,不需要再次比较,直接返回即可int l1 = storeString.length(), l2 = target.length();if(l1 > l2 || (l1 == l2 && storeString.compareTo(target)<0)){continue;}// 判断是否是子串if(isSubStr(s, target)){storeString = target;}}return storeString;}// 判断是否是s的子串public boolean isSubStr(String s,String target){int i = 0;// s的遍历位置int j = 0;// j的遍历位置while(i < s.length() && j < target.length() ){// 当出现相等的时候,对j进行++if(s.charAt(i++) == target.charAt(j)){j++;}}return j == target.length();}}
