1.Implement an algorithm to determine if a string has all unique characters What if you can not use additional data structures?

The length of ACSII code of a character is 8, so we can build a array, the length is 260, to represent the hash table of all characters.

bool allCharUnique(string s){

int a[260];

memset(a,0,sizeof a);

for(int i=0;i<s.length();i++){

if(a[s[i]]==0)a[s[i]]++;

else return false;

}

return true;

}

2.Write code to reverse a C-Style String (C-String means that “abcd” is represented as five characters, including the null character )

consider the null character. we traverse the string to find the last index of valid char.

void reverseCStyleString(char* s){

int i=0,j=0;

char *cur = s;

while(cur){cur++;j++;}--j;

while(i<j){

swap(s[i],s[j]);

++i;--j;

}

}

3.Design an algorithm and write code to remove the duplicate characters in a string without using any additional buffer NOTE: One or two additional variables are fine An extra copy of the array
is not

FOLLOW UP

Write the test cases for this method

Here is two idea. One is O(n^2), by loop all characters of the string, and each char, loop all characters whose index is bigger than current char. if
these two char is equal, then erase the char whose index is bigger.

Other idea is build a map array, map[8], represents the hash table of all characters. Following is this code:

void removeDuplicateChar(string s){

if(s==NULL)return;

int map[]={0,0,0,0,0,0,0,0};

int ascii,index,pos;

int cur=0;

for(int i=0;i<s.length();i++){

ascii = (int)s[i];

index = ascii/32;

pos = ascii%32;

int res = map[index]&(1<<pos);

if(!res){

map[index]|=1<<pos;

s[cur++]=s[i];

}

}

s[cur]='\0';

return;

}

Test case: NULL , empty string, all duplicates and others.

4.Write a method to decide if two strings are anagrams or not.

One idea: sort these two strings, then look whether of these two strings are equal. O(nlogn)

Other idea: map the first string by unordered_map<char,int>. then decide the map 0f the second string is equal to the first. O(n). Following is this code:

bool isAnagrams(string a,string b){

if(a==NULL||b==NULL)return false;

if(a.length()==0&&b.length()==0)return true;

if(a.length()!=b.length())return false;

unordered_map<char,int> map;

for(int i=0;i<a.length();i++){

if(map.count(a[i])==0)map.insert(make_pair(a[i],1));

else map[a[i]]++;

}

for(int i=0;i<b.length();i++){

if(map.count(b[i])==0)return false;

else{

map[b[i]]--;

if(map[b[i]]<0)return false;

}

}

return true;

}

5.Write a method to replace all spaces in a string with "%20".

"%20" is a string with length of 3. each space is 1 length. So the string's length is extend to s.length()+spaceCount*2. First enlarge the string,whose length
is s.length()+spaceCount*2, then we copy the original string to this new string. When we come across a space, the new string is insert '0' '2' '%'.

void replaceAllSpaces(string s){

if(s==NULL)return;

int spaceCount=0,preLenth=s.length();

for(int i=0;i<s.length();i++){

if(s[i]==' ')spaceCount++;

}

for(int i=0;i<2*spaceCount;i++)s+=' ';

int cur=s.length()-1,j=preLenth-1;

while(j>=0){

if(s[j]==' '){

s[cur--]='0';

s[cur--]='2';

s[cur]='%'

}else{

s[cur]=s[j];

}

cur--;j--;

}

return;

}

6.Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a method to rotate the image by 90 degrees Can you do this in place?

ClockWise rotate: first we turn over all pixels diagonal. then reverse each line.

other idea: rotate each layer such as loop diagram. left layer ->top layer,bottom layer -> left layer, right layer->bottom layer, top layer->right layer.

void clockwiseRotate(vector<vector<int> > matrix){

if(matrix.size()==0||matrix[0].size()==0)return;

int n=matrix.size();

for(int i=0;i<n;i++){

for(int j=i;j<n;j++){

swap(matrix[i][j],matrix[j][i]);

}

}

for(int i=0;i<n;i++){

reverse(matrix[i].begin(),matrix[i].end());

}

return;

}

7.Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0.

we build two record array(row,column) to track in which row/column should be set to 0.

void setMatrix(vector<vector<int> > matrix){

if(matrix.size()==0||matrix[0].size()==0)return;

int *row = new int[matrix.size()];

int *column = new int[matrix[0].size()];

memset(row,0,sizeof row);memset(column,0,sizeof column);

for(int i=0;i<matrix.size();i++){

for(int j=0;j<matrix[i].size();j++){

if(matrix[i][j]==0){

row[i]=1;column[j]=1;

}

}

}

for(int i=0;i<matrix.size();i++){

for(int j=0;j<matrix[i].size();j++){

if(row[i]||column[j])matrix[i][j]=0;

}

}

return;

}

8.Assume you have a method isSubstring which checks if one word is a substring of another Given two strings,s1and s2,write code to check if s2 is a rotation of s1using only one call to isSubstring
(i e , “waterbottle” is a rotation of “erbottlewat”).

first, make sure s1.length() equals to s2.length(). if(s1.length()!=s2.length())return false;

Then, concatenate s1 with itself and look s2 is or not the substring of s1s1.

bool isRotation(string s1,string s2){

if(s1==NULL||s2==NULL)return false;

int len = s1.length();

if(len==s2.length()&&len>0){

string s1s1 = s1+s1;

return isSubstring(s1s1,s2);

}

return false;

}

版权声明:本文博主原创文章,博客,未经同意不得转载。

CareerCup chapter 1 Arrays and Strings的更多相关文章

  1. CareerCup Chapter 9 Sorting and Searching

    9.1 You are given two sorted arrays, A and B, and A has a large enough buffer at the end to hold B. ...

  2. Careercup | Chapter 1

    1.1 Implement an algorithm to determine if a string has all unique characters. What if you cannot us ...

  3. Careercup | Chapter 3

    3.1 Describe how you could use a single array to implement three stacks. Flexible Divisions的方案,当某个栈满 ...

  4. Careercup | Chapter 2

    链表的题里面,快慢指针.双指针用得很多. 2.1 Write code to remove duplicates from an unsorted linked list.FOLLOW UPHow w ...

  5. Careercup | Chapter 8

    8.2 Imagine you have a call center with three levels of employees: respondent, manager, and director ...

  6. Careercup | Chapter 7

    7.4 Write methods to implement the multiply, subtract, and divide operations for integers. Use only ...

  7. CareerCup Chapter 4 Trees and Graphs

    struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int val):val(val),left(NULL),rig ...

  8. Careercup | Chapter 6

    6.2 There is an 8x8 chess board in which two diagonally opposite corners have been cut off. You are ...

  9. Careercup | Chapter 5

    5.1 You are given two 32-bit numbers, N andM, and two bit positions, i and j. Write a method to inse ...

随机推荐

  1. linux下安装QT过程

    说QT是linux下主要的图形开发工具一点都不过分,虽然诺基亚公司放弃Meego.遣散了Qt开发团队,但是它的各种商业.企业版本还是的到了很好的保护,linux下的开发工具集里还是经常看到它的身影,毕 ...

  2. Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计)

    Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计) 本篇博客介绍Cocos2d-x的第一个实例--重力加速计測试.效果图(注:这里无法模拟重力感应): --[ ...

  3. Semaphore实现Andoird版源代码剖析

    Semaphore是一个计数的信号量.从概念上来说,信号量维持一组许可(permits).acquire方法在必须的时候都会堵塞直到有一个许可可用,然后就会拿走这个许可.release方法加入一个许可 ...

  4. JavaScript 使用Document记录cookie

    cookie对于我们使用者来说,有时帮助还是挺大的,比方对于一些不是特别重要的站点,比方公司的測试平台,每次登陆都要手动输入username和password 非常繁琐.所以为了更少的引入其他框架,就 ...

  5. SE 2014年4月30日

    如图配置: SW1 SW2 SW3 SW4组成一环型网络 Sw2 和Sw4个存在两业务vlan(vlan 10 和vlan 20) 1.Smart Link 组1 的引用实例1(绑定VLAN 10 ) ...

  6. hdu 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】(转)

    HDU 动态规划(46道题目)倾情奉献~ [只提供思路与状态转移方程] Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包 ...

  7. Windows Phone开发(42):缓动动画

    原文:Windows Phone开发(42):缓动动画 前面在讨论关键帧动画的时候,我有意把几个带缓动动画的关键帧动画忽略掉,如EasingColorKeyFrame.EasingDoubleKeyF ...

  8. jquery实现仿select列表的即时搜索及拼音搜索

    这里提到select,其实不是select,而是用<li><input>标签去仿造一个select,以实现对已有“option”的快速检索功能. 以<input>标 ...

  9. Redis安装及简单測试

    摘要: Redis是眼下业界很受到欢迎的一个内存数据库,一般用作系统的中间缓存系统,用以提升总体商业系统的吞吐量和响应速度.本文将简要介绍安装的主要过程以及给出一个简要的測试代码. 1.  系统环境和 ...

  10. Spring整合JMS-基于activeMQ实现(二)

    Spring整合JMS-基于activeMQ实现(二) 1.消息监听器      在Spring整合JMS的应用中我们在定义消息监听器的时候一共能够定义三种类型的消息监听器,各自是MessageLis ...