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 ...
随机推荐
- 编程算法 - 萨鲁曼的军队(Saruman's Army) 代码(C)
萨鲁曼的军队(Saruman's Army) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 直线上有N个点, 每个点, 其距离为R以内的区域里 ...
- 获取CentOS软件源中的updates包
之前在本地网络中建了一个CentOS软件源,挺好用的,可是发现有些软件还是装不上,因为系统安装盘中的包并不全,有些软件的依赖在updates源中,updates源在网上,怎么把其中的包拿到呢?一种方法 ...
- Java读取本地文件,并显示在JSP文件中
当我们初学IMG标签时,我们知道通过设置img标签的src属性,能够在页面中显示想要展示的图片.其中src的值,可以是磁盘目录上的绝对,也可以是项目下的相对路径,还可以是网络上的图片路径.在存 ...
- hdu2389(HK算法)
传送门:Rain on your Parade 题意:t个单位时间后开始下雨,给你N个访客的位置(一维坐标平面内)和他的移动速度,再给M个雨伞的位置,问在下雨前最多有多少人能够拿到雨伞(两个人不共用一 ...
- zoj3795 Grouping --- 良好的沟通,寻找最长的公路
给定一个图,为了保持图分裂至少成多个集合的集合内可以使点没有直接或间接的关系. 首先,题意可以得到图中可能含有环.该环的内侧是肯定是要被拆卸. 图点降低建DAG画画,能想象..图从零点渗透深入,在点中 ...
- Wix打包系列(二)用户界面和本地化操作
原文:Wix打包系列(二)用户界面和本地化操作 上一章节,我们已经大概知道如何对文件进行打包安装,不过我们也注意到,通过对Sample.wxs的编译链接,生成的msi安装包没有任何用户界面,只有一个安 ...
- 【译】ASP.NET MVC 5 教程 - 4:添加模型
原文:[译]ASP.NET MVC 5 教程 - 4:添加模型 在本节中,我们将添加一些管理电影数据库的类,这些类在ASP.NET MVC 应用程序中扮演“Model”的角色. 我们将使用.NET F ...
- 升级旧Delphi应用转向支持手机的一个思路
系统架构改为B/S. 业务规则所有在服务端实现,使用REST服务封装旧有系统,这样可最大程度的利用原有代码. client所实用HTML5+javascript,这样client不须布署PC,可极大减 ...
- [Leetcode]-ReverseLinkedList
题目:单链表取反 #include <stdlib.h> #include <stdio.h> typedef struct node *list; typedef struc ...
- Yii学习笔记之三(在windows 上安装 advanced )
首先说一下下载地址: http://www.yiiframework.com/download/ 然后将下载下来的文件进行解压到 你指定的文件夹 解压过程中假设报什么错误 直接忽略掉 我的解压文件夹是 ...