我无法想出解决此问题必须存在的高效算法:
遍历一个数组,检查作为“标记”的元素。如果我注意到任何标记没有将其余元素划分为相同长度的运行,请设置一个标志。除了最后一次运行,这是剩余部分。
不应设置标志的示例:
*....*....*..*
应该设置标志的例子:
*....*...*...*
*....*....**
直觉告诉我们应该可以很简单地在线完成,并且它可能等同于一些我不知道其通常名称的众所周知的问题。
最佳答案
解决方案:
计算标记之间元素的数量并形成一个列表。比检查这个列表元素是否除了最后一个元素之外都是相同的,并且列表的最后一个元素不为 0。边缘情况:只有一个元素,它可以是 0。
Python代码:
def is_correct(string):
splitted_list = string.split("*")[1:-1] # Split and strip edge elements.
if len(splitted_list) == 1:
return True
if len(splitted_list[-1]) == 0: # Check that last element is 0.
return False
for i in range(1, len(splitted_list)-1): # Check that others are the same.
if len(splitted_list[0]) != len(splitted_list[i]):
return False
return True
# Test
print is_correct("*....*....*..*")
print is_correct("*....*...*...*")
print is_correct("*....*....**")
关于arrays - 在遍历数组时检查某些 "divider elements"是否有规律地间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29732927/