我尝试使用递归来解决它。这是我的代码。它失败了#AB; ABDA" (返回3而不是1)。我的理由很明显,但我不确定如何解决这个问题。
LocusService locusService = new LocusService(this);
locusService.startRealtimeGPSListening(1000); //Set intervel
locusService.setRealTimeLocationListener(new LocusService.RealtimeListenerService() {
@Override
public void OnRealLocationChanged(Location location) {
if(location!=null){
//Do your Stuff here
finish();
}
}
});
答案 0 :(得分:0)
这个问题遗漏了一些信息,无法确切地知道您在寻找什么。我将在下面假设您想要找到也是后缀的最长前缀(以相反的顺序)。
递归地,想法是比较第一个和最后一个字符。如果它们不相等,则它不能成为一个回文(在这种情况下,返回0)。如果它们相等,那个“回文部分”的长度是1 +剩余单词的“回文部分”的长度(即没有第一个和最后一个字符的单词):
def lps(word):
if len(word) > 0 and word[0] == word[-1]:
return 1 + lps(word[1:-1])
else:
return 0
print(lps('abc'))
print(lps('abca'))
print(lps('abba'))
print(lps('abcba'))
print(lps('abda'))
结果为0, 1, 2, 3, 1
。
这些数字表示最长的前缀(反向顺序)也是后缀。
正如你所看到的,“abba”导致长度为2(因为“ab”),即使它是一个长度为4的回文。如果你想得到那个回文的总长度,它可能更容易迭代地做:
def lps_full(word):
i = len(word)
while i > 0:
if word[:i] == word[:-i-1:-1]:
return i
i -= 1
return 0
相同的例子导致0, 1, 4, 5, 1
,即,对于非palindrom的单词,结果与上面相同,以及单词的单词长度。
如果强制要求,可以递归定义相同的函数:
def lps(word, i=0):
if len(word) > i and word[i] == word[-i-1]:
return lps(word, i+1)
else:
return i