作者:牛客213220802号
链接:https://www.nowcoder.com/discuss/980252?channel=-1&source_id=discuss_terminal_nctrack&trackId=undefined
来源:牛客网
字符串1在字符串2中是否为子串,是的话输出第一个子串的在字符串2中的位置,不是的话输出-1.是子串的标准是只要字符串1的任意排列组合在字符串2中出现就可以
题意大概是这样,有人见过这个题对应的牛客真题吗?麻烦提供下
考试时案例通过率只有66.67%,思路如下:
a = len(str1)
for循环a次,然后分别获取到str1中每个字符在str2中的位置,再把获取到的位置进行排序(这样就可以屏蔽掉字符串排列组合带来的复杂性),排序后如果前后两个数之差为1或者-1,则说明str1在str2中存在,并且输出最小位置对应的字符在str2中出现的位置。该思路得到的案例通过率只有66.67%
这里有一个漏洞:可能str1中的某个字符在str2中出现了多次,这样同一个字符可能会获取到多个索引,再用上面的方法去处理就有问题了,有大神有更好的思路吗探讨下
作者:牛客213220802号
链接:https://www.nowcoder.com/discuss/980252?channel=-1&source_id=discuss_terminal_nctrack&trackId=undefined
来源:牛客网
class Solution:
def findAnagrams(self, s: str, p: str) -> List[int]:
s_len, p_len = len(s), len(p)
if s_len < p_len:
return []
ans = []
p_count = collections.Counter(p)
for i in range(s_len - p_len + 1):
s_count = collections.Counter(s[i: i + p_len])
if s_count == p_count:
ans.append(i)
return ans