本文主要是介绍2021-03-30(30. 串联所有单词的子串),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
困难题必摸瞎。。。
看别人题解:最大的亮点就是应用了 HashMap 了吧,使得我们不再纠结于子串包含单词的顺序。然后对于算法的优化上,还是老思路,去分析哪些判断是不必要的,然后把它除之。
class Solution {public List<Integer> findSubstring(String s, String[] words) {List<Integer> ans=new ArrayList<Integer>();if(s.length()==0){return ans;}Map<String,Integer> allwords=new HashMap<String,Integer>();int wordnum=words.length;int wordleng=words[0].length();for(String word:words){int value=allwords.getOrDefault(word,0);allwords.put(word,value+1);}for(int i=0;i<s.length()-wordnum*wordleng+1;++i){HashMap<String, Integer> hasWords = new HashMap<String, Integer>();int num = 0;while(num<wordnum){String word = s.substring(i + num * wordleng, i + (num + 1) * wordleng);if (allwords.containsKey(word)) {int value = hasWords.getOrDefault(word, 0);hasWords.put(word, value + 1);if (hasWords.get(word) > allwords.get(word)) {break;}} else {break;}num++;}if (num == wordnum) {ans.add(i);}}return ans;}
}
这篇关于2021-03-30(30. 串联所有单词的子串)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!