给定一个字符串 s 和一些长度相同的单词 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, 两数相除
解析:
先判断符号,^是异或运算,只有一正一负结果才为负,否则结果为正,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。然后再把每次查找的次数累计计算即可。
关注,点赞,评论,转发