假设串用+python+字符串类型表示,给定两个字符串+s+和+t+,求串+t+在串+s+中不重叠出现的次数,如果不是子串则返回0
时间: 2023-11-17 19:05:20 浏览: 39
可以使用字符串的find方法来判断子串是否在主串中出现,如果出现则返回子串在主串中第一次出现的位置,如果不出现则返回-1。可以利用这个方法来判断子串是否在主串中出现过。
具体实现可以使用一个循环来遍历主串中的每一个可能的起始位置,然后使用find方法来判断子串是否在该位置出现过。如果出现过,则计数器加1,否则继续遍历下一个位置。最后返回计数器的值即可。
以下是Python代码示例:
```
def count_non_overlap(s, t):
count = 0
i = 0
while i < len(s):
pos = s.find(t, i)
if pos == -1:
break
count += 1
i = pos + 1
return count
```
相关问题
判断一个字符串是否有回文子串用java代码实现
可以使用中心扩展算法来实现,代码如下:
```
public boolean isPalindrome(String s) {
int n = s.length();
for (int i = 0; i < 2 * n - 1; i++) {
int left = i / 2;
int right = left + i % 2;
while (left >= 0 && right < n && s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
if (right - left == i % 2 + 1) {
return true;
}
}
return false;
}
```
这个算法首先遍历所有可能的回文子串中心点,然后从中心点向两边扩展,同时判断左右两边的字符是否相等。如果相等,则继续扩展;否则就是无法得到回文子串了。如果最终扩展的长度等于回文子串长度,则表示找到了一个回文子串。
1) 串的模式匹配:设s、t为两个字符串,判断t是否为s的子串。如果是,输出子串所在位置(第一个字符),否则输出-1。 2) 根据位置和长度,删除子串。使用顺序串用BF算法 的完整代码
好的,我会尽力回答您的问题。以下是我的答案:
1)串的模式匹配可以使用暴力匹配算法,也称为 BF(Brute Force)算法。该算法的思想是:从主串 S 的第一个字符开始,依次与模式串 P 的第一个字符、第二个字符……第 m 个字符比较,如果所有字符都匹配成功,则返回子串第一个字符在主串中的位置,否则向右移动一位,继续比较。
具体实现的代码如下:
int BF(string s, string t)
{
int slen = s.length(), tlen = t.length();
for(int i = 0; i <= slen - tlen; i++)
{
int j;
for(j = 0; j < tlen; j++)
if(s[i + j] != t[j]) break;
if(j == tlen) return i;
}
return -1;
}
其中,s 为主串,t 为模式串,返回值为子串在主串中的位置,如果不存在则返回 -1。
2)根据位置和长度删除子串,可以先用 substr() 函数找到要删除的子串,然后再用 erase() 函数删除子串,最后返回删除后的新串。具体实现代码如下:
string DeleteSubstr(string s, int pos, int len)
{
string sub = s.substr(pos, len);
s.erase(pos, len);
return s;
}
其中,s 为原串,pos 表示要删除的子串开始位置,len 表示要删除的子串长度。返回值为删除后的新串。
希望我的回答可以帮助到您,如果还有其他问题,请随时提出。