leetcode-反转字符串 II
思路:先反转从 i 位置开始k个字符,再每次跳过2*k个,以此类推。
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.length();
for (int i = 0; i < n; i += 2 * k) {
reverse(s.begin() + i, s.begin() + min(i + k, n));
}
return s;
}
};
注意:reverse函数是左闭右开![first,last).
leetcode-反转字符串中的单词 III
思路:用一个指针,从头开始,找到空格停下,然后从后往前将空格前的字符放进一个新的字符串中,以此类推
class Solution {
public:
string reverseWords(string s) {
int start=0;
string ret;
int pos=0,sz=s.size();
while(pos<sz)
{
while(pos<sz&&s[pos]!=' ')
{
pos++;
}
for(int i=start;i<pos;i++)
{
ret+=s[start+pos-i-1];
}
while(pos<sz&&s[pos]==' ')
{
pos++;
ret+=' ';
}
start=pos;
}
return ret;
}
};
牛客-把字符串转换成整数
思路:先处理首字符,后用for循环配合平方函数放进一个整型类型中,其中循环过程需要判断是否出现字母,有字母则直接返回0。
class Solution {
public:
int StrToInt(string str) {
int i=0;
int count=0;
int flag=1;
int sz=str.size();
if(str[i]=='+')
{
flag=1;
i++;
}
else if(str[i]=='-')
{
flag=-1;
i++;
}
for(;i<str.size();i++)
{
if(!(str[i]>='0'&&str[i]<='9'))
return 0;
count+=(str[i]-'0')*pow(10,sz-i-1);
}
count*=flag;
return count;
}
};
/*首先,这个题不考虑字母*/
/*那就简单多了,只考虑数字,遇到其他情况直接返回-1就行了*/
class Solution {
public:
int StrToInt(string str) {
int ans = 0;int isplus = 1;
for(char ch:str){
if(isalpha(ch)){
return 0;
}if (ch == '+' || ch =='-'){
isplus = (ch == '+') ? 1 : -1;
}if(isdigit(ch)){
ans = ans*10+ch-'0';
}
}return isplus*ans;
}
};