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. mac显示隐藏文件

    苹果Mac OS X操作系统下,隐藏文件是否显示有很多种设置方法,最简单的要算在Mac终端输入命令. 显示/隐藏Mac隐藏文件命令如下(注意其中的空格并且区分大小写): 第一种 显示Mac隐藏文件的命 ...

  2. [转]Zabbix 3.0 安装笔记

    Zabbix 3.0 只支持CentOS 7.0以上版本,所以先在虚拟机中安装好CentOS 7.0 x64,并设置好IP,允许虚拟机联网. 1.安装MySQL 从最新版本的linux系统开始,默认的 ...

  3. JDE修改Grid列样式

    Set Grid Color :to change the background color of a cell, row, column, or the entire control. Set Gr ...

  4. 通俗易懂的讲解iphone视图控制器的生命周期

    IOS 视图控制器的生命周期非常非常重要,所以我有必要写个文章来和大家一起探讨问题. 今天在学习视图控制器的生命周期,也看了一下网上的一些资料,但总觉得不是那么好理解,首先我们来看一张图: 先粗略讲一 ...

  5. HNU OJ10320 穿越火线 简单模拟

    穿越火线 Time Limit: 10000ms, Special Time Limit:25000ms, Memory Limit:65536KB Total submit users: 12, A ...

  6. 开始编写正式的iOS 程序(iOS编程指导)

    App设计基础 在确定了你的App主要功能后,需要把它转化为代码.如果你是第一次开发属于自己的iOS App,需要花些时间熟悉基本概念.iOS内置了很多设计样式,多了解下能对你以后有帮助. 初稿 设计 ...

  7. java dom4j解析xml实例(2)

    java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4 ...

  8. 几种Android数据序列化方案

    一.引言 数据的序列化在Android开发中占据着重要的地位,无论是在进程间通信.本地数据存储又或者是网络数据传输都离不开序列化的支持.而针对不同场景选择合适的序列化方案对于应用的性能有着极大的影响. ...

  9. wc--Linux

    这个命令的功能也很好记,因为它功能很有限: wc -c filename:显示一个文件的字节数 wc -m filename:显示一个文件的字符数 wc -l filename:显示一个文件的行数 w ...

  10. HDU6321 Dynamic Graph Matching (杭电多校3C)

    给出一些点集,然后对于每一次要求给出的这些点集里的1,2,3,4,5,6....n/2的匹配数, dp[i][j] 表示到第i次操作里点集为j的匹配数,然后我每次加入一条边u-v,我的状态就是 dp[ ...