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. 解压tar.gz文件报错gzip: stdin: not in gzip format解决方法

    解压tar.gz文件报错gzip: stdin: not in gzip format解决方法 在解压tar.gz文件的时候报错 1 2 3 4 5 [Sun@localhost Downloads] ...

  2. 安卓开发28:自定义View类

    自定义View类 通过自定义View类,可以自定义复杂的,按照自己需求的控件. 一个简单的例子 mainActivity.java 这个里面就是最普通的代码,但是给自定义的控件加上了一个onclick ...

  3. 持续集成环境Jenkins的搭建和使用

    这几天试着搭了个持续集成环境,我使用的是Jenkins,它的前身是Hadson,由于被Oracle收购了,所以换个名字继续开源,这个有点像MySQL. 持续集成总是跟敏捷开发什么的搞在一起,显得非常高 ...

  4. VSTO学习笔记(九)浅谈Excel内容比较

    原文:VSTO学习笔记(九)浅谈Excel内容比较 说起文件内容比较,或许我们首先想到的是UltraCompare这类专业比较的软件,其功能非常强大,能够对基于文本的文件内容作出快速.准确的比较,有详 ...

  5. python手记(47)

    #!/usr/bin/env python # -*- coding: utf-8 -*- #http://blog.csdn.net/myhaspl #code:myhaspl@qq.com imp ...

  6. R12 付款过程请求-功能和技术信息 (文档 ID 1537521.1)

    In this Document   Abstract   History   Details   _afrLoop=2234450430619177&id=1537521.1&dis ...

  7. Win32 Windows编程 十

    一 Windows画图 1 图形绘制 1.1 图形绘制的方式 获取到画图的句柄,设备描写叙述符(DC).使用对应的画图API.在设备上绘制图形 1.2 颜色 RGB,每种颜色8位,共24位颜色 32位 ...

  8. C#基础总结之Attribute

    Attribute是什么 Attribute的中文姓名 为什么我要拿一段文字来说Attribute的中文姓名呢?答案是:因为这很重要.正所谓“名”不正,则言不顺:另外重构手法中有一种很重要的方法叫重命 ...

  9. ESXI主机打开shell后主机警告处理

    昨天为了配置snmp监控,将几台ESXI 5.5主机的shell 在控制台上从disable状态修改为enable状态后,登陆vcenter后,发现所有的主机都有警告. 处理过程如下: 选中有警告标志 ...

  10. poj3140(树的dfs)

    题目链接:http://poj.org/problem?id=3140 题意:给定一棵n棵节点的树,求删去某条边后两个分支的最小差异值. 分析:num[u]表示以u点为根节点的子树的总人数,那么不在该 ...