程序员面试金典,牛课网在线编程题目答案(1)题目地址点击打开链接
//请实现一个算法,确定一个字符串的所有字符是否全都不同。
//这里我们要求不允许使用额外的存储结构。
bool checkDifferent(string iniString) {
// write code here
int len = iniString.length();
int vis[256];
memset(vis,0,sizeof(vis));
for(int i = 0 ; i < len ; i++)
{
if(vis[iniString[i]-'0'])return false;
vis[iniString[i]-'0']=1;
}
return true;
}
//请实现一个算法,在不使用额外数据结构和储存空间的情况下,
//翻转一个给定的字符串(可以使用单个过程变量)。
string reverseString(string iniString) {
// write code here
int len = iniString.size();
for(int i = 0 ; i < (len+1)/2 ; i++ )
{
swap(iniString[i],iniString[len-i-1]);
}
return iniString;
}
//给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,
//能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。
bool checkSam(string stringA, string stringB) {
// write code here
int lenA = stringA.size();
int lenB = stringB.size();
if(lenA!=lenB)return false;
sort(stringA.begin(),stringA.end());
sort(stringB.begin(),stringB.end());
for(int i = 0 ; i < lenA ; i++)
{
if(stringA[i]!=stringB[i])return false;
}
return true;
}
//请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,
//并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。
string replaceSpace(string iniString, int length) {
// write code here
string pStr=iniString;
string str = "%20";
int num = 0 ;
for(int i = 0 ; i < length ; i++)
{
if(iniString[i]==' ')
{
//cout<<pStr.find(" ")<<endl;
pStr.replace(num,1,str);
num+=3;
}
else pStr[num++]=iniString[i];
//cout<<pStr[num-1]<<endl;
}
//pStr[num]='\0';
return pStr;
}
//利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。
//比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
string zipString(string iniString) {
// write code here
string pStr;
int len = iniString.size();
for(int i = 0 , j = 0 ; i < len ; i++)
{
while(i<len&&iniString[i]==iniString[j])i++;
pStr+=iniString[j];
stringstream s;
s<<(i-j);
pStr+=s.str();
j=i;
/*
int aa = 30;
stringstream ss;
ss<<aa;
string s1 = ss.str();
cout<<s1<<endl; // 30
*/ //10进制int转化为string
}
return (len>pStr.size())?pStr:iniString;
}
//有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,
//在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。
vector<vector<int> > transformImage(vector<vector<int> > mat, int n) {
// write code here
for(int i = 0 ; i < (n)/2 ; i++)
{ //外层循环,从第(i,i)开始

本文提供了一系列编程题目的解答,包括字符串处理、链表操作、二叉树检查等常见算法问题,旨在帮助读者理解和掌握基本数据结构及算法实现。
最低0.47元/天 解锁文章
233

被折叠的 条评论
为什么被折叠?



