编程题:
题一:把字符串转换成整数
把字符串转换成整数_牛客题霸_牛客网
示例1
输入:
"+2147483647"返回值:
2147483647
思路一:
第一步:it从str的第一个字符开始遍历,定义一个最后输出的值你,以及判断结果正负的flag;
第二步:第一个为正则忽略,为负将flag改为负值;
第三步:遍历字符串,遇到非字母直接退出,否则记录下来;
第四步:最后得到的值n乘以判断正负的flag就是结果。
class Solution {
public:int StrToInt(string str) {//it从str的第一个字符开始遍历string::iterator it = str.begin();int n = 0;//由flag来决定结果的正负int flag = 1;//第一个为正则忽略,为负将flag改为负值if(*it == '+' ){it += 1;}if(*it == '-'){flag = -1;it += 1;}//遍历字符串,遇到非字母直接退出,否则记录下来while(it != str.end()){if(*it < 48 || *it > 57){return 0;}else{n *= 10;n += *it - 48;}++it;}return n * flag;}
};
题二:反转字符串
344. 反转字符串 - 力扣(LeetCode)
示例 1:
输入:s = ["h","e","l","l","o"] 输出:["o","l","l","e","h"]
思路一:
没有啥好说的直接从第一个字符开始与最后一个字符一起替换!!!
class Solution {
public:void reverseString(vector<char>& s) {int left = 0;int right = s.size() - 1;//从第一个字符开始位置替换while(left < right){swap(s[left],s[right]);++left;--right;}}
};
思路二:
直接用string类里的逆置接口reverse也可以直接完成反转!!!
class Solution {
public:void reverseString(vector<char>& s) {reverse(s.begin(),s.end());}
};
题三:字符串中的第一个唯一字符
387. 字符串中的第一个唯一字符 - 力扣(LeetCode)
思路一:
第一步:定义一个记录字母的数组;
第二步:从下标为0开始遍历,记录字母对应数组下标的个数;
第三步:再次遍历字符串,将在数组中只出现一次的的字母对应字符串的下标返回;
第四步:如果第三步中遍历完以后没有找到只出现一次的字母,返回-1.
class Solution {
public:int firstUniqChar(string s) {//定义一个记录字母的数组int arr[26] = {0};int it1 = 0;//从下标为0开始遍历,记录字母对应数组下标的个数while(it1 < s.size()){arr[s[it1] - 'a'] += 1;++it1;}int it2 = 0;//再次遍历字符串,将在数组中只出现一次的的字母对应字符串的下标返回while(it2 < s.size()){if(arr[s[it2] - 'a'] == 1){return it2;}++it2;}return -1;}
};
思路二:
第一步: 分别对字符串进行正序查询和反序查询;
第二步: 如果所查询的字符下标相等,说明此字符只出现了一次。
class Solution {public:int firstUniqChar(string s) {for(int i=0; i<s.size(); ++i){int index = s.find(s[i]);int reverse_index = s.rfind(s[i]); if(index == reverse_index)return i;}return -1;}
};
本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!欢迎各位大佬在评论区探讨,交流!
如果本篇对你有帮助的话,三连支持一下吧。
感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!