渣基础:比照Hawstein学Cracking the coding interview(2)

来源:互联网 发布:灯塔软件 编辑:程序博客网 时间:2024/05/17 01:39

作者:Hawstein
出处:http://hawstein.com/posts/1.4.html
声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。


Q1.4 写一个函数判断两个字符串是否是变位词。

变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词。比如说, abbcd和abcdb就是一对变位词。

方法一:是用STL里的sort方法,那么时间复杂度就是O(nlogn)时间排序,O(n)的时间来比较是否相等。其中字符串的是否相等,可调用s.compare(t),若相等,则为0.

方法二:统计每个字符串里各个字符出现的字数,然后判断字符出现次数是否相同。作者开了一个256的整数数组,遍历第一个字符串时,将相应的字符数次数加1;遍历第二个字符串时,将相应字符出现的字数减一,要是最后每个数都为0,就说明是一堆变位词。


Q1.5 写一个函数,把字符串中所有的空格替换为%20 。

我的方法跟他的一样,不过在取c[]时候,用的是记录空格数,然后:

<span style="white-space:pre"></span>for(int i=0;i<len;i++){if(s[i]==' '){c[i+2*p]='%';c[i+2*p+1]='2';c[i+2*p+2]='0';p++;}elsec[2*p+i]=s[i];}

他写的是:

<span style="white-space:pre"></span>for(int i=0; i<len; ++i)    {        if(c[i] == ' ')        {            cc[p] = '%';            cc[p+1] = '2';            cc[p+2] = '0';            p += 3;        }        else        {            cc[p] = c[i];            ++p;        }    }

感觉比我写的要好一点。。。他还有一种情况写的是原串空间足够大,则直接在原串上从后向前改。


Q1.6  一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度。 你能原地进行操作吗?(即不开辟额外的存储空间)

作者的方法采用的是先对角线处理,然后再上下翻转,也就是分两次。

这里我自己写的时候碰到的问题:

1.没想到分两步来旋转矩阵,感觉难解。通式是

2.在循环次数上出错,倒置最后矩阵不变了。。。要注意循环的次数。

PS:在这题上 作者的方法有点小问题,就在于它函数的形参是a[][4],通用性上并不好,因此我查了另外一种方法:

转载自:http://blog.csdn.net/sunnyyoona/article/details/18566587


void RotateImage(vector<vector<int> > &matrix)  这么写的话,就可以通过n=matrix.size() 来判断矩阵大小,当然在初始化的时候 就需要用push_back了。

    vector<int> row1 = {1,2,3};      vector<int> row2 = {4,5,6};      vector<int> row3 = {7,8,9};      vector<vector<int>> matrix;      matrix.push_back(row1);      matrix.push_back(row2);      matrix.push_back(row3);  


0 0
原创粉丝点击