CareerCup chapter 1 Arrays and Strings
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的更多相关文章
- 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. ...
- Careercup | Chapter 1
1.1 Implement an algorithm to determine if a string has all unique characters. What if you cannot us ...
- Careercup | Chapter 3
3.1 Describe how you could use a single array to implement three stacks. Flexible Divisions的方案,当某个栈满 ...
- Careercup | Chapter 2
链表的题里面,快慢指针.双指针用得很多. 2.1 Write code to remove duplicates from an unsorted linked list.FOLLOW UPHow w ...
- Careercup | Chapter 8
8.2 Imagine you have a call center with three levels of employees: respondent, manager, and director ...
- Careercup | Chapter 7
7.4 Write methods to implement the multiply, subtract, and divide operations for integers. Use only ...
- CareerCup Chapter 4 Trees and Graphs
struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int val):val(val),left(NULL),rig ...
- Careercup | Chapter 6
6.2 There is an 8x8 chess board in which two diagonally opposite corners have been cut off. You are ...
- 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 ...
随机推荐
- Android获得Manifest在<meta-data>元件的值
前段时间攻略完成游戏开发项目.其中用于包装散装. 目前市场上的网络不提交.但是,通过设置Manifest中的Meta_data>去获得相关參数,游戏ID号改变.游戏ID改变,然后游戏内容就改变. ...
- hdu 1224 Free DIY Tour(最长的公路/dp)
http://acm.hdu.edu.cn/showproblem.php? pid=1224 基础的求最长路以及记录路径. 感觉dijstra不及spfa好用,wa了两次. #include < ...
- VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel)
原文:VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel) private void AddRightMenu() { Microsoft ...
- graph driver-device mapper-02driver基本操作
// 清除thin pool 1.1 func (d *Driver) Cleanup() error { // 停止thin pool err := d.DeviceSet.Shutdown() r ...
- 【C语言】写一个函数,实现字符串内单词逆序
//写一个函数,实现字符串内单词逆序 //比如student a am i.逆序后i am a student. #include <stdio.h> #include <strin ...
- ImageMagick的安装及使用
近期在使用ImageMagick处理酒店团购图片,写篇博客小小的总结下它的安装及使用方法.ImageMagick是一套功能强大且免费的图片处理开发包,能够用来读,写和处理多种格式的图片文件,总之非常强 ...
- HDU 3277 Marriage Match III(二分+最大流)
HDU 3277 Marriage Match III 题目链接 题意:n个女孩n个男孩,每一个女孩能够和一些男孩配对,此外还能够和k个随意的男孩配对.然后有些女孩是朋友,满足这个朋友圈里面的人.假设 ...
- 2-13. 平均两个有序序列(25)(ZJU_PAT 名单 | 排列 )
主题链接:http://pat.zju.edu.cn/contests/ds/2-13 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0, A1-AN-1的中位 ...
- Java中字符串中子串的查找共有四种方法(indexof())
Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下:1.int indexOf(String str) :返回第一次出现的指定子字符串在此字 ...
- A Game of Thrones(7) -Arya
Arya’s stitches were crooked again. She frowned down at them with dismay and glanced over to where h ...