程序员面试金典,牛课网在线编程题目答案(1)

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



程序员面试金典,牛课网在线编程题目答案(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)开始
 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值