Python找出全部子串位置
时间: 2024-02-13 20:37:02 浏览: 75
以下是一个Python程序,它找到一个字符串的全部子串位置:
```
def find_substrings(s, sub):
indexes = []
start = 0
while True:
index = s.find(sub, start)
if index == -1:
break
indexes.append(index)
start = index + 1
return indexes
s = "hello world, hello python"
sub = "hello"
print(find_substrings(s, sub)) # 输出 [0, 13]
```
该程序定义了一个名为`find_substrings`的函数,该函数接受两个参数:一个字符串`s`和一个子串`sub`。它使用Python的`find`方法来找到子串的位置,并将它们添加到一个列表中。最后,它返回该列表。
在程序的主函数中,我们定义了一个字符串`s`和一个子串`sub`,并调用`find_substrings`函数来查找子串的位置。程序将打印出子串在字符串`s`中的位置。
相关问题
python 找出全部子串位置:两个字符串s1,s2,找出s2在s1中所有出现的位置。
可以使用Python的字符串方法`find()`或者正则表达式来实现找出s2在s1中所有出现的位置。
方法一:使用字符串方法`find()`
```python
s1 = "hello world, hello python, hello java"
s2 = "hello"
pos = []
i = 0
while i < len(s1):
j = s1.find(s2, i)
if j == -1:
break
pos.append(j)
i = j + 1
print(pos) # [0, 12, 24]
```
方法二:使用正则表达式
```python
import re
s1 = "hello world, hello python, hello java"
s2 = "hello"
pos = [i.start() for i in re.finditer(s2, s1)]
print(pos) # [0, 12, 24]
```
以上两种方法均可以找出s2在s1中所有出现的位置。
python返回所有回文子串
在Python中,找出字符串的所有回文子串可以使用动态规划的方法。一个常见的算法是Manacher's Algorithm,它是一种非常高效的解决这个问题的算法,其时间复杂度为O(n)。这里是一个简单的示例代码:
```python
def find_palindromes(s):
if not s:
return []
# 初始化变量
p = [0] * len(s)
center = right = max palindrome length = 0
palindromes = []
for i in range(len(s)):
# 普通情况
if i < right:
mirror = 2 * center - i
p[i] = min(right - i, p[mirror])
#尝试扩展奇数长度的回文
while i + (p[i] + 1) < len(s) and i - p[i] - 1 >= 0 and s[i + p[i] + 1] == s[i - p[i] - 1]:
p[i] += 1
#尝试扩展偶数长度的回文
if i + p[i] > right:
center, right = i, i + p[i]
# 如果当前子串是回文,添加到结果列表
if p[i] > max_palindrome_length:
max_palindrome_length = p[i]
start = (i - max_palindrome_length) // 2
end = start + max_palindrome_length
palindromes.append(s[start:end+1])
return palindromes
# 使用示例
s = "babad"
print(find_palindromes(s)) # 输出:['a', 'bab', 'aba']
```
这个函数会返回给定字符串`s`中所有的最长回文子串。如果你需要所有回文子串(包括非最长的),只需去掉判断条件即可。
阅读全文