一、计算从位置x到y的最少步数
问题描述
小F正在进行一个 AB 实验,需要从整数位置 x 移动到整数位置 y。每一步可以将当前位置增加或减少,且每步的增加或减少的值必须是连续的整数(即每步的移动范围是上一步的 -1,+0 或 +1)。首末两步的步长必须是 1。求从 x 到 y 的最少步数。
输入描述
输入包含两个整数 x 和 y,表示起始位置和目标位置。
输出描述
输出从 x 到 y 所需的最小步数。
测试样例
样例1:
输入:
x_position = 12, y_position = 6
输出:4
样例2:
输入:
x_position = 34, y_position = 45
输出:6
样例3:
输入:
x_position = 50, y_position = 30
输出:8
样例4:
输入:
x_position = 0, y_position = 0
输出:0
解题思路:
✳从x到y的距离为s :=abs(x-y)
✳由于每次的步数只能是上次基础上的+1、-1或0。所以,步数的过程由三部分组成:
1)1~n项的和:n*(n+1)/2
2)前1~n-1项的和:n*(n-1)/2
3)i个n
4)0个或1个1~n之间的数x
✳整理公式为:
n^2 = s - i*n - x
ans = 2*n-1+i+(0|1)
代码实现:
输入样例:
输出样例:
二、字符串最短循环子串
小M在研究字符串时发现了一个有趣的现象:某些字符串是由一个较短的子串反复拼接而成的。如果能够找到这个最短的子串,便可以很好地还原字符串的结构。你的任务是给定一个字符串,判断它是否是由某个子串反复拼接而成的。如果是,输出该最短的子串;否则,输出空字符串""。
例如:当输入字符串为 abababab 时,它可以由子串 ab 反复拼接而成,因此输出 ab;而如果输入 ab,则该字符串不能通过子串的重复拼接得到,因此输出空字符串。
测试样例
样例1:
输入:
inp = "abcabcabcabc"
输出:'abc'
样例2:
输入:
inp = "aaa"
输出:'a'
样例3:
输入:
inp = "abababab"
输出:'ab'
样例4:
输入:
inp = "ab"
输出:''
样例5:
输入:
inp = "abcdabcdabcdabcd"
输出:'abcd'
样例6:
输入:
inp = "b"
输出:''
数据范围:
测试数据集
解题思路:
题目简单清晰,直接暴力for循环。
外层循环遍历模板串,若原len(inp)%len(s) != 0则跳过此串。
内层循环遍历原串,对模板进行匹配,若匹配失败则退出循环,考虑下一个模板串。