zoukankan      html  css  js  c++  java
  • 30. Substring with Concatenation of All Words

    You are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s that is a concatenation of each word in words exactly once and without any intervening characters.

    Example 1:

    Input:
      s = "barfoothefoobarman",
      words = ["foo","bar"]
    Output: [0,9]
    Explanation: Substrings starting at index 0 and 9 are "barfoo" and "foobar" respectively.
    The output order does not matter, returning [9,0] is fine too.
    

    Example 2:

    Input:
      s = "wordgoodgoodgoodbestword",
      words = ["word","good","best","word"]
    Output: []

    public class Solution {
        public List<Integer> findSubstring(String s, String[] words) {
            List<Integer> result = new ArrayList<>();
            if(s.length() == 0 || words.length == 0) return result;
            final int wordLength = words[0].length();
            final int catLength = wordLength * words.length;
    
            if (s.length() < catLength) return result;
    
            HashMap<String, Integer> wordCount = new HashMap<>();
    
            for (String word : words)
                wordCount.put(word, wordCount.getOrDefault(word, 0) + 1);
    
            for (int i = 0; i <= s.length() - catLength; ++i) {
                HashMap<String, Integer> unused = new HashMap<>(wordCount);
    
                for (int j = i; j < i + catLength; j += wordLength) {
                    final String key = s.substring(j, j + wordLength);
                    final int pos = unused.getOrDefault(key, -1);
    
                    if (pos == -1 || pos == 0) break;
    
                    unused.put(key, pos - 1);
                    if (pos - 1 == 0) unused.remove(key);
                }
    
                if (unused.size() == 0) result.add(i);
            }
    
            return result;
        }
    }

    注意空s和空words的情况

  • 相关阅读:
    hadoop配置笔记
    hadoop安装笔记
    抄一篇maven的备忘
    这个计划任务的名字老记不住,还是存一下了
    GodMode
    恢复oracle数据从delete
    在注册表中查看Windows10系统激活密钥的方法
    Jenkins 提效工具之 Jenkins Helper 使用介绍
    移动硬盘安装Ubuntu系统(UEFI引导)的一些记录
    Linux系统下的Jenkins的简要安装方法
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11746249.html
Copyright © 2011-2022 走看看