华为OD真题:输出字符串1在字符串2中的位置

字符串1在字符串2中是否为子串,是的话输出第一个子串的在字符串2中的位置,不是的话输出-1.是子串的标准是只要字符串1的任意排列组合在字符串2中出现就可以
题意大概是这样,有人见过这个题对应的牛客真题吗?麻烦提供下

考试时案例通过率只有66.67%,思路如下:
a = len(str1)
for循环a次,然后分别获取到str1中每个字符在str2中的位置,再把获取到的位置进行排序(这样就可以屏蔽掉字符串排列组合带来的复杂性),排序后如果前后两个数之差为1或者-1,则说明str1在str2中存在,并且输出最小位置对应的字符在str2中出现的位置。该思路得到的案例通过率只有66.67%

这里有一个漏洞:可能str1中的某个字符在str2中出现了多次,这样同一个字符可能会获取到多个索引,再用上面的方法去处理就有问题了,有大神有更好的思路吗探讨下
#华为OD机考##华为od#
全部评论
力扣28题
点赞 回复 分享
发布于 2022-07-06 16:45
这题多少分呀
点赞 回复 分享
发布于 2022-07-12 23:40
为啥不能把字符串排列组合,看组合里的字符在2中位置,超时不影响得分吧?
点赞 回复 分享
发布于 2022-07-10 11:24
额,看题目描述,Python感觉很简单呀,不是直接用in判断一下,在的话就一层for循环直接匹配就完事儿了,或者会正则表达式就更简单了,match一下搞定
点赞 回复 分享
发布于 2023-02-04 23:01 四川
滑动窗口标准解法,有套路的😁
点赞 回复 分享
发布于 2022-07-13 17:42
剑指offer第二版14题😁可以说是一样了
点赞 回复 分享
发布于 2022-07-13 17:41
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
点赞 回复 分享
发布于 2022-07-08 12:48

相关推荐

08-06 08:33
四川大学 Java
OPPO官方内推:卧槽!!!啥破公司啊!!!
投递OPPO等公司10个岗位
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务