leetcode 438.Find All Anagrams in a String
来源:互联网 发布:圆方软件论坛 编辑:程序博客网 时间:2024/06/16 16:36
原题:
Given a string s and a non-empty string p, find all the start indices of p's anagrams in s.
Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100.
The order of output does not matter.
Example 1:
Input:s: "cbaebabacd" p: "abc"Output:[0, 6]Explanation:The substring with start index = 0 is "cba", which is an anagram of "abc".The substring with start index = 6 is "bac", which is an anagram of "abc".
Example 2:
Input:s: "abab" p: "ab"Output:[0, 1, 2]Explanation:The substring with start index = 0 is "ab", which is an anagram of "ab".The substring with start index = 1 is "ba", which is an anagram of "ab".The substring with start index = 2 is "ab", which is an anagram of "ab".找出顺序不同的小写字母排序。
第一次的想法非常简单,就是逐个拿出来进行排序,然后比较就好。结果超时了。
/** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */int* findAnagrams(char* s, char* p, int* returnSize) { int slen=strlen(s); int cmp(const void* a,const void* b) { return *(char*)a-*(char*)b; } int plen=strlen(p); if(slen<plen) return NULL; int* result; result=(int*)malloc(sizeof(int)*slen); qsort(p,plen,sizeof(char),cmp); char *sample; sample=(char*)malloc(sizeof(char)*plen); for(int n=0;n+plen<=slen;n++) { strncpy(sample,s+n,plen); qsort(sample,plen,sizeof(char),cmp); if(strstr(sample,p)!=NULL) { *(result+*returnSize)=n; (*returnSize)++; } } return result;}
虽然看起来很简单,但是效率比较差。
所以有了第二种。。。
就是自己做特征运算。
/** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */int* findAnagrams(char* s, char* p, int* returnSize) { int slen=strlen(s); int cmp(const void* a,const void* b) { return *(char*)a-*(char*)b; } int plen=strlen(p); if(slen<plen) return NULL; int* result; result=(int*)malloc(sizeof(int)*slen); int* pventor; pventor=(int *)malloc(sizeof(int)*26); memset(pventor,0,sizeof(int)*26); for(int n=0;n<plen;n++) { int t=(int)*(p+n)-97; (*(pventor+t))++; //printf("P%d,",t); } bool flag; int* sventor; for(int n=0;n+plen<=slen;n++) { flag=false; sventor=(int *)malloc(sizeof(int)*26); memset(sventor,0,sizeof(int)*26); for(int m=0;m<plen;m++) { int t=*(s+m+n)-97; (*(sventor+t))++; //printf("S%d,",t); } for(int m=0;m<26;m++) { //printf("L%d,%d,",*(pventor+m),*(sventor+m)); if(*(pventor+m)!=*(sventor+m)) { flag=false; break; } flag=true; } if(flag==true) { *(result+*returnSize)=n; (*returnSize)++; } } return result;}这个在memset上写错了,直接写的26也是蠢到家了。。。 调试了好久才发现。
不过这个从时间上少了一个logn。快一些。
阅读全文
0 0
- LeetCode Find All Anagrams in a String
- leetcode: Find All Anagrams in a String
- [LeetCode]Find All Anagrams in a String
- Leetcode Find All Anagrams in a String
- LeetCode : Find All Anagrams in a String
- leetcode[Find All Anagrams in a String]
- leetcode 438. Find All Anagrams in a String
- LeetCode 438. Find All Anagrams in a String
- LeetCode 438. Find All Anagrams in a String
- [leetcode] 438. Find All Anagrams in a String 解题报告
- 【leetcode】438. Find All Anagrams in a String【E】
- [leetcode]438. Find All Anagrams in a String
- [LeetCode] 438. Find All Anagrams in a String
- LeetCode笔记:438. Find All Anagrams in a String
- LeetCode 438. Find All Anagrams in a String
- Leetcode 438. Find All Anagrams in a String (Easy) (cpp)
- 【LeetCode】 438. Find All Anagrams in a String
- [LeetCode]438. Find All Anagrams in a String
- 二叉树的基本操作,遍历,子结构,镜像,构建
- Android anfix热修复 原理剖析
- Halcon小技巧之如何在编辑回车时不执行代码
- iOS 应用逆向工程2.0 书籍的笔记
- pygorithm: 一个用于学习重要算法的Python模块
- leetcode 438.Find All Anagrams in a String
- UE4-Android-环境部署遇到的问题
- liunx 环境下 python模块numpy,scipy,matplotlib 安装
- iOS中多语言本地化流程的优化
- 文件内容的查阅
- jeecg如何在一个页面使用按钮选择弹出选择框
- 贪心算法题集总结
- 【FZU
- android在java代码中绘制矩形框