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实现字符设备驱动的基础步骤

    Linux应用层想要操作kernel层的API,比方想操作相关GPIO或寄存器,能够通过写一个字符设备驱动来实现. 1.先在rootfs中的 /dev/ 下生成一个字符设备.注意主设备号 和 从设备号 ...

  2. 优酷m3u8视频源地址获取失败

    昨天和今天上午,优酷站点视频全然没有办法播放,可是我是获取的优酷视频的视频原地址,所以app还是能够正常播放而且有下载功能.今天下午開始,优酷视频网页能够訪问了,可是视频原地址却不在了.我全部的app ...

  3. Linux pipe功能

    1. 功能说明 pipe(管道建设): 1) 头 #include<unistd.h> 2) 定义函数: int pipe(int filedes[2]); 3) 函数说明: pipe() ...

  4. 设计模式之——Factory(工厂模式)

    工厂模式用于,通过统一的创建对象接口来创建对象,而子类可以决定对象的创建方式. class CObject { }; class CCar : public CObject { }; class CF ...

  5. [置顶] ※数据结构※→☆线性表结构(stack)☆============栈 序列表结构(stack sequence)(六)

    栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表.栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据.栈 ...

  6. 使用EXCEL设置“下拉菜单”选项功能

    原创作品.出自 "深蓝的blog" 博客.欢迎转载.转载时请务必注明出处,否则有权追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...

  7. codechef Sums in a Triangle题解

    Let's consider a triangle of numbers in which a number appears in the first line, two numbers appear ...

  8. Ipsec transport mode and turnnel mode

     隧道(tunnel)模式:用户的整个IP数据包被用来计算AH或ESP头,AH或ESP头以及ESP加密的用户数据被封装在一个新的IP数据包中.通常,隧道模式应用在两个安全网关之间的通讯. 传输(t ...

  9. [POJ 3735] Training little cats (结构矩阵、矩阵高速功率)

    Training little cats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9613   Accepted: 2 ...

  10. thinkphp框架相关研究(一)

    小编最近开始正式研究thinkphp框架,在此写下研究的整个历程,从最最基本的搭建网站开始,一步步记录.希望对大家有所帮助. 1.菜鸟从下载框架到建站 参考网址:http://blog.csdn.ne ...