字母异位词(anagram)的多种复杂度实现
发布时间
阅读量:
阅读量
题目
这是一道源自微软的面试题目,具体内容如下:若两个单词所包含的字母完全相同,仅排列顺序不同,则这两个单词被称为字母易位词(anagram)。例如,“silent”与“listen”属于字母易位词,而“apple”与“aplee”则不属于。请编写一个函数用于判断两个单词是否为字母易位词。假设输入的两个单词均由小写字母组成,并且要求所设计算法的时间复杂度尽可能低。
在看到这一问题后,你最初的解决思路是怎样的?
思路一
首先,最基础的处理方式是验证字符串s1中的每个字符是否都能在s2中找到对应的匹配项(前提是s1和s2的长度一致)。为了应对像“apple”和“aplee”这样并非易位词的情况,仅仅判断字符是否存在是不够的,还需进行额外标记。具体而言,在s2中将已经与s1匹配成功的字符位置标记为0,C++实现方式如下:
bool anagramSolution1(string s1,string s2)
{
if(s1.size()!=s2.size())
return false;
bool stillOk=true;
for(int i=0;i<s1.size()&&stillOk;i++)
{
bool found=false;
for(int
全部评论 (0)
还没有任何评论哟~
