class Solution {
public:
bool isPalindrome(string s) {
for(int i = 0;i<s.size();++i){
if(s[i]<='z'&&s[i]>='a'){
s[i] = s[i] - 'a'+'A';
}
}
int l = 0,r = s.size()-1;
while(l<r){
if(!(s[l]>='A'&&s[l]<='Z'||s[l]<='9'&&s[l]>='0')){
l++;
continue;
}
if(!(s[r]>='A'&&s[r]<='Z'||s[r]<='9'&&s[r]>='0')){
r--;
continue;
}
if(s[l]!=s[r]){
return false;
}
l++;
r--;
}
return true;
}
};
对字符串进行预处理后直接使用双指针遍历。
class Solution {
public:
bool isPalindrome(string s) {
for(int i = 0;i<s.size();++i){
if(s[i]<='z'&&s[i]>='a'){
s[i] = s[i] - 'a'+'A';
}
}
int l = 0,r = s.size()-1;
while(l<r){
if(!(s[l]>='A'&&s[l]<='Z'||s[l]<='9'&&s[l]>='0')){
l++;
continue;
}
if(!(s[r]>='A'&&s[r]<='Z'||s[r]<='9'&&s[r]>='0')){
r--;
continue;
}
if(s[l]!=s[r]){
return false;
}
l++;
r--;
}
return true;
}
};
同上。
class Solution {
public:
int cal(int x,int y){
return 2*x+y;
}
int calculate(string s) {
int x = 1,y = 0;
for(int i = 0;i<s.size();++i){
if(s[i]=='A'){
x = cal(x,y);
}else y = cal(y,x);
}
return x+y;
}
};
简单遍历。
法二:不论是对于x进行操作还是对于y操作,(这里假设对x进行操作 x+y(对x进行操作)->2x+y+y = 2(x+y) 对y操作同理,即不论对x还是y进行操作都会使得 x+y 的值翻倍,因此不需要对其进行遍历。
class Solution {
public:
int calculate(string s) {
if(s.size()==0) return 1;
return 1<<s.size();
}
};
class Solution {
public:
int finalValueAfterOperations(vector<string>& operations) {
int x = 0;
for(int i = 0;i<operations.size();++i ){
if(operations[i][1]=='+'){
x++;
}else x--;
}
return x;
}
};
只需检测每一行的第二个位置是什么符号即可。
class Solution {
public:
string replaceSpace(string s) {
string ans="";
for(int i = 0;i<s.size();++i){
if(s[i]==32){
ans+="%20";
}else ans+=s[i];
}
return ans;
}
};
遍历原字符串,然后在空格的时候填入 %20 即可。
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int i = 1;i<nums.size();++i){
if(nums[i]==nums[i-1]){
return true;
}
}
return false;
}
};
排序,比较相邻,结束。
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums;
}
};
直接调用库函数。
class Solution {
public:
vector<int> runningSum(vector<int>& nums) {
for(int i = 1;i<nums.size();++i){
nums[i]+=nums[i-1];
}
return nums;
}
};
使用一个循环计算。
class Solution {
public:
void reverseString(vector<char>& s) {
char tmp;
int l = 0,r = s.size()-1;
while(l<r){
tmp = s[r];
s[r] = s[l];
s[l] = tmp ;
l++;
r--;
}
}
};
双指针。
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int l = 0 , r = numbers.size()-1;
while(l<r){
if(numbers[l]+numbers[r]==target) return {l,r};
if(numbers[l]+numbers[r]>target){
r--;
continue;
}else if(numbers[l]+numbers[r]<target){
l++;
continue;
}
}
return {l,r};
}
};
因为只有一组解,所以可以直接使用双指针进行遍历。