我是靠谱客的博主 辛勤秋天,最近开发中收集的这篇文章主要介绍lin的题目,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.反转字符串

/*
将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。 如:输入“I am a student”,输出“tneduts a ma I”。
输入参数:
inputString:输入的字符串
返回值:
输出转换好的逆序字符串
*/

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

//1.替换法:用一个新的string tmp变量存储逆序字符
string fun1(string inputString){
    string tmp = inputString;
    int size = inputString.length();
    for(int i = 0;inputString[i]!='';i++){
        tmp[size-1-i] = inputString[i];
    }
    return tmp;
}
//2.直接使用c++函数reverse(反转)
string fun2(string inputString){
    reverse(inputString.begin(),inputString.end());
    return inputString;
}
//3.中分法:中位线对应的字符调换,用tmp做中人----------------(推荐使用)
string fun3(string inputString){
    char tmp;
    for(int i = 0;i<inputString.length()/2;i++){
        tmp = inputString[i];
        inputString[i] = inputString[inputString.length()-1-i];
        inputString[inputString.length()-1-i] = tmp;
    }
    return inputString;
}

int main(){
    string str = "I am a student";
    //string str;
    //getline(cin,str);
    //后面就把接口里的代码复制到下面,注意参数名
    //接口的return 改为cout
    cout<<"method 1:"<<fun1(str)<<endl;
    cout<<"method 2:"<<fun2(str)<<endl;
    cout<<"method 3:"<<fun2(str)<<endl;
    return 0;
}

二、和一一样

三、替换空格

/*
请编写一个方法,将字符串中的空格全部替换为“%20”。
假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。
给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。

*/

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

//用一个tmp存储
string fun1(string iniString,int len){
    string tmp;
	for(int i=0;iniString[i]!='';i++){
		if(iniString[i]==' '){
			tmp = tmp + "%20";
		}
		else
			tmp = tmp + iniString[i];
	}
    return tmp;
}
lass Solution {
public:
	void replaceSpace(char *str,int length) {
        string tmp;
	    for(int i=0;str[i]!='';i++){
		    if(str[i]==' '){
			    tmp = tmp + "%20";
		    }
		    else
			    tmp = tmp + str[i];
        }
        int i;
        for(i = 0;tmp[i]!='';i++){
            str[i]=tmp[i];
        }
        str[i]='';
	}
};
int main(){
	string str = "I am a student";
	cout<<"method 1:"<<fun1(str,0)<<endl;
    return 0;
}

四、替换字符串

/*
字符串替换 | 时间限制:3秒 | 内存限制:32768K
请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。
给定一个字符串A,同时给定它的长度n及参数字符数组arg,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。
测试样例:
"A%sC%sE",7,['B','D','F']
返回:"ABCDEF"
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;

string fun1(string A, int n, vector<char> arg,int m) {
	string tmp;
	int j = 0;
	for(int i = 0;A[i]!='';i++)
	{
		if(A[i] == '%' && A[i + 1] == 's'){
			i++;
			tmp = tmp + arg[j++];
		}
		else
			tmp = tmp + A[i];
	}
    //超出的部分放在后面
	for(int i = j; i < arg.size(); i++)
	{
		tmp = tmp + arg[i];
	}
	return tmp;
}

int main(){
    /*
      1.string A;
        getline(cin,A);
      2.cin>>n;
      3.int i = 0;
        while(cin>>a[i]){
            i++;
        }
        vector<char>arg(a,a+n);
      4.cin>>m;
    */
	string A = "A%sC%sE";
	int n = A.length();
	char a[3]={'B','D','F'};
	vector<char>arg(a,a+3);
	cout<<"method :"<<fun1(A,n,arg,0)<<endl;
    return 0;
}

五、字符集合

/*
字符集合 | 时间限制:1秒 | 内存限制:32768K
输入一个字符串,求出该字符串包含的字符集合
输入描述:
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
输出描述:
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
示例1
输入
abcqweracb
输出
abcqwer
*/
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
using namespace std;
//接口
string fun1(string str){
	string tmp;
	map<char,char>hash; //哈希表思想
	for(int i = 0;str[i]!='';i++){
		if(hash[str[i]]==0){
			tmp = tmp + str[i];
			hash[str[i]]++;				
		}
	}
	return tmp;
}

//没有接口
int main(){
    string str;
    while(cin>>str){
        string tmp;
        map<char,int>hash;
        for(int i=0;i<str.size();i++){
            if(hash[str[i]]==0){
                hash[str[i]]++;
                tmp+=str[i];
            }
        }
        cout<<tmp<<endl;
    }
}

六、删除公共字符

#include <iostream>
#include <string>
 using namespace std;
 
 int main()
 {
     string str1, str2;
     getline(cin, str1);
     getline(cin, str2);
     int k = 0;
     for (int i = 0; i < str1.size(); i++)
     {
         if (str2.find(str1[i]) == -1)
             cout << str1[i];
     }
     return 0;
 }

七、字符串中找出连续最长的数字串

/*
标题:字符串中找出连续最长的数字串 | 时间限制:1秒 | 内存限制:32768K
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:
个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述:
在一行内输出str中里连续最长的数字串。
示例1
输入
abcd12345ed125ss123456789
输出
123456789
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;

string fun1(string str) {
	int sum =0;   //统计长度
	int max = 0;  //最长的长度
	int start = 0; //记录当前最长数字串的起始位置
	int end = 0;   //记录当前最长数字串的结束位置
	int tmp = 0;   //起始位置暂存值
	int j = 0;
	for(int i = 0;str[i]!='';i++){
		if(str[i]<='9'&&str[i]>='0'){
			sum = 1;
			tmp = i;j
			for(j = i+1;str[j]<='9'&&str[j]>='0';j++){
				sum++;
			}
			if(max<sum){
				max = sum;
				end = j-1;
				start = tmp;
			}
			i=j;
		}
	}
	cout<<start<<endl;
	cout<<end<<endl;
	str = str.substr(start,end-start+1);
	return str;
}

int main(){
	string A = "abcd12345ed125ss123456789";
	cout<<"method :"<<fun1(A)<<endl;
    return 0;
}




/*
标题:字符串中找出连续最长的数字串 | 时间限制:1秒 | 内存限制:32768K
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:
个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述:
在一行内输出str中里连续最长的数字串。
示例1
输入
abcd12345ed125ss123456789
输出
123456789
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main(){
	string str;
    cin>>str;
    int sum =0;   //统计长度
	int max = 0;  //最长的长度
	int start = 0; //记录当前最长数字串的起始位置
	int end = 0;   //记录当前最长数字串的结束位置
	int tmp = 0;   //起始位置暂存值
	int j = 0;
	for(int i = 0;str[i]!='';i++){
		if(str[i]<='9'&&str[i]>='0'){
			sum = 1;
			tmp = i;
			for(j = i+1;str[j]<='9'&&str[j]>='0';j++){
				sum++;
			}
			if(max<sum){
				max = sum;
				end = j-1;
				start = tmp;
			}
			i=j;
		}
	}
	str = str.substr(start,end-start+1);
	cout<<str<<endl;
    return 0;
}

八、倒置字符串

/*
标题:倒置字符串 | 时间限制:1秒 | 内存限制:32768K
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割
示例1
输入
I like beijing.
        输出
beijing. like I
*/

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
using namespace std;

string ReverseSentence(string str) {
	string tmp;
	string sum;
	int i = 0;  
	while (str[i] != ''){        
		if (str[i] != ' ')
		{
            while (str[i] != ' '&&str[i] != ''){
				tmp += str[i];
				i++;
			}
			sum.insert(0,tmp);//从末尾插入
			tmp.clear();
		}
		else { i++; sum.insert(0, " ");}
	}
	return sum;
}


int main(){
	string str = "I like beijing.";
	cout<<ReverseSentence(str)<<endl;
	return 0;
}

/*
标题:倒置字符串 | 时间限制:1秒 | 内存限制:32768K
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割
示例1
输入
I like beijing.
        输出
beijing. like I
*/

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
using namespace std;

int main(){
	string str;
    getline(cin,str);
	string tmp;
	string sum;
	int i = 0;  
	while (str[i] != ''){        
		if (str[i] != ' ')
		{
            while (str[i] != ' '&&str[i] != ''){
				tmp += str[i];
				i++;
			}
			sum.insert(0,tmp);//从末尾插入
			tmp.clear();
		}
		else { i++; sum.insert(0, " ");}
	}
    cout<<sum;
	return 0;
}






九、寻找第K大(快速排序)

快速排序.gif

参考:https://www.runoob.com/w3cnote/quick-sort.html
快速排序的基本思想:挖坑填数+分治法

  1. 从序列当中选择一个基准数,用x来存储它
    在这里我们选择序列当中第一个数i=0最为基准数
  2. 让i=l,j=r(l是数组的第一个数下标,r是最后一个数下标)
  3. 将序列当中的所有数依次遍历,比基准数x大或者等于的位于其右侧,比基准数x小的位于其左侧
  4. 重复步骤1.2,直到所有子集当中只有一个元素为止(即)。
    用伪代码描述如下:
    1.i =L; j = R; 将基准数挖出形成第一个坑a[i]。
    2.j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。
    3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。
    4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中
 
/*
寻找第K大 | 时间限制:3秒 | 内存限制:32768K
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
测试样例:
[1,3,5,2,2],5,3
返回:2
*/
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void quick_sort(int s[], int l, int r){
    if(l<r){
        int i = l,j = r,x = s[l];
        while(i<j){
            while(i<j&&s[j]>=x)
                j--;
            if(i<j)s[i++]=s[j];

            while(i<j&&s[i]<x)
                i++;
            if(i<j)s[j--]=s[i];
        }
        s[i] =x;
        quick_sort(s,l,i-1);
        quick_sort(s,i+1,r);
    }
}
int findKth(vector<int> a, int n, int K) {
    // write code here
    int len =a.size();
    int s[len];
    for(int i =0;i<a.size();i++){
        s[i]=a[i];
    }
    quick_sort(s,0,n-1);
    int k=n-K;
    return s[k];
}
int main() {
     int i=0;
	 int n,K;
	 int a[5];
     while(cin>>a[i]){
         i++;
		 if(i==5)break;
     }
     cin>>n;
     cin>>K;
     vector<int>vec(a,a+n);
	 for(int i=0;i<vec.size();i++)
		 cout<<vec[i];
     cout<<endl<<findKth(vec,n,K);
	 return 0;
}



class Finder {
public:
    int findKth(vector<int> a, int n, int K) {
        // write code here
        int len =a.size();
        int s[len];
        for(int i =0;i<a.size();i++){
            s[i]=a[i];
        }
        quick_sort(s,0,n-1);
        int k=n-K;
        return s[k];
    }
    void quick_sort(int s[], int l, int r){
    if(l<r){
        int i = l,j = r,x = s[l];
        while(i<j){
            while(i<j&&s[j]>=x)
                j--;
            if(i<j)s[i++]=s[j];
            
            while(i<j&&s[i]<x)
                i++;
            if(i<j)s[j--]=s[i];
        }
        s[i] =x;
        quick_sort(s,l,i-1);
        quick_sort(s,i+1,r);
        }
    }
};

 

最后

以上就是辛勤秋天为你收集整理的lin的题目的全部内容,希望文章能够帮你解决lin的题目所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部