给定一个字符串 和一些长度相同的单词 words。 s 中找出可以恰好串联 words 中所有单词的子串的起始位置。

注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。

示例 1:

输入:
  s = "barfoothefoobarman",  words = ["foo","bar"]
输出: [0,9]

解释: 从索引 0 和 9 开始的子串分别是 "barfoor" 和 "foobar" 。 输出的顺序不重要, [9,0] 也是有效答案。

示例 2:

输入:
  s = "wordgoodstudentgoodword",  words = ["word","student"]
输出: []

请关注微信公众号“数据结构和算法”,答案下期公布

上期的问题是:85, 两数相除

86,与所有单词相关联的字串_子串

解析:

先判断符号,^是异或运算,只有一正一负结果才为负,否则结果为正,dividend是被除数,divisor是除数。计算的时候把dividend和divisor都转化为负数,这是因为如果都转化为正数,当dividend为Integer.MIN_VALUE的时候会出现错误,因为Integer.MIN_VALUE是-2147483648,而Integer.MAX_VALUE是2147483647,int类型最大值是不能表示2147483648的,但如果把正数转化为负数是没问题的。我们看第二个while循环,他是计算除数的倍数,比如57除以3,他先计算3的2倍是不是小于57,如果小于在看他的4倍是不是小于57,如果还小于就看他的8倍……一直继续找,如果多了再重新开始找,比如3的16倍48小于57,那么3的32倍大于57,那么在用57-48=9再除以3。然后再把每次查找的次数累计计算即可。

关注,点赞,评论,转发