编程题:
题一:把字符串转换成整数
示例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; } };
题二:反转字符串
示例 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; } };
本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!欢迎各位大佬在评论区探讨,交流!
如果本篇对你有帮助的话,三连支持一下吧。
感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!