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