题目
class Solution {
public:
int addCarry(int num1, int num2, int &carry){
int sum = num1 + num2 + carry;
if(sum >= 10){
sum -= 10;
carry = 1;
} else{
carry = 0;
}
return sum;
}
string addStrings(string num1, string num2) {
//首先将字符串反转顺序 有助于相加的进位
reverse(num1.begin(),num1.end());
reverse(num2.begin(),num2.end());
//进行字符串的相加
int i, j, carry = 0;//carry为进位符
int sum = 0;
string result;//保存结果
while(i < num1.size() && j < num2.size()){
sum = addCarry(num1[i]-'0',num2[j]-'0',carry);
result += (sum+'0');
i++;
j++;
}
//如果两个字符串的长度不想等,首先字符串1长
while(i<num1.size()){
sum = addCarry(num1[i]-'0',0,carry);
result += (sum+'0');
i++;
}
//首先字符串2长
while(j<num2.size()){
sum = addCarry(0,num2[j]-'0',carry);
result += (sum+'0');
j++;
}
//如果最后carry是1 则有:
if(carry > 0){
result +=(carry+'0');
}
//反转字符串
reverse(result.begin(),result.end());
return result;
}
};
class Solution {
public:
//定义交换函数
void swap(char& a,char& b){
char temp = a;
a = b;
b = temp;
}
string reverseOnlyLetters(string S) {
int len = S.size();//求字符串的长度
int left = 0;//字符串的左下标
int right = len-1;//字符串的右下标
while(left < right){
swap(S[left],S[right]);
left++;
right--;
}
return S;
}
};
题目
class Solution {
public:
//定义交换函数
void swap(char& a,char& b){
char temp = a;
a = b;
b = temp;
}
string reverseOnlyLetters(string S) {
int len = S.size();//求字符串的长度
//如果字符串长度小于等于1 返回字符串
if(len<=1){
return S;
}
int left = 0;//字符串的左下标
int right = len-1;//字符串的右下标
//左小标 小于右小标 则判断是否需要反转
while(left < right){
//左小标 小于右小标 则判断是否需要反转
while(left<right){
//如果字符属于这个范围 则跳出 不属于这个范围则左字符++
if((S[left] >= 'a'&& S[left] <='z' ) ||( S[left] >= 'A'&& S[left] <= 'Z' )){
break;
}else{
left++;
}
}
while(left<right){
//如果字符属于这个范围 则跳出 不属于这个范围则右字符++
if((S[right] >= 'a'&& S[right] <='z' )||(S[right] >= 'A'&& S[right] <= 'Z')){
break;
}else{
right--;
}
}
swap(S[left],S[right]);//交换位置
//向两端逼近
left++;
right--;
}
return S;
}
};
题目
方法1:
class Solution {
public:
int firstUniqChar(string s) {
int count[256] = {0};//定义一个256个字节的空间(因为字符的空间最大是256)
//将字符出现的值记录下来 没有重复的是1 重复的一次累加
for(int i = 0;i<s.size();++i){
count[s[i]]++;
}
//查找出现的次数 如果是第一次出现 那么count【】 ==1 返回小标i
for(int i = 0;i<s.size();++i){
if(count[s[i]] == 1){
return i;
}
}
return -1;
}
};
方法2:从两头查找 如果下标相等则不重复 return
for(int i = 0;i<s.size();++i){
int index = s.find(s[i]);
int reverseIndex = s.rfind(s[i]);
if(index == reverseIndex){
return i;
}
}
return -1;
题目:
#include
#include
using namespace std;
int GetStringLen(string str){
if(str.size() == 0){
return 0;
}
int spaceIndex = str.rfind(' ');//查找最后一个空格的位置
//如果最后一个空格的位置 一直没有找到,直到字符串结束 则返回这个字符串的长度
if(spaceIndex == string::npos){
return str.size();
}
//字符串的长调度减去最后一个空调的的位置 在减去1 则是最后一个单词的长度
return str.size()- spaceIndex -1;
}
int main(){
string str;
getline(cin,str);
int len = GetStringLen(str);
cout<<len;
return 0;
}