题解:日常水题,根据描述,按照描述来干了。
bool backspaceCompare(string S, string T) {
string s_tmp = enterStr(S);
string t_tmp = enterStr(T);
return s_tmp== t_tmp;
}
string enterStr(string &s){
if(s.length()==0) return "";
string ret = "";
for(int i=0;i<s.length();i++){
if(s[i]=='#'&&(ret.length()>0)) ret.erase(ret.end()-1);
else if(s[i]=='#'&&(ret.length()==0))continue;
else ret+=s[i];
}
return ret;
}
题解:超喜欢这类写的工工整整的题目。根据描述,只要我们遍历数组,找到符合山脉条件(中间的山要高于两侧)的位置,然后以该位置为中心,向左右拓展。(改一下写代码习惯,括号另起一行书写)
int longestMountain(vector<int>& A)
{
if(A.size()<3) return 0;
int ret = 0;
for(int i=1;i<A.size()-1;i++)
{
if(A[i]>A[i-1]&&A[i]>A[i+1])
{
int tmp=3;
int left = i-1;
while(left>0 &&A[left]>A[left-1])
{
tmp++;
left--;
}
int right = i+1;
while(right<A.size()-1&&A[right]>A[right+1])
{
tmp++;
right++;
}
ret=max(ret,tmp);
}
}
return ret;
}
题解:根据描述,只需要对手上所有的牌建立一个map,每三张连续的牌的val-1,一直检测,若不能检测到连续的牌,return false。
bool isNStraightHand(vector<int>& hand, int W) {
int n = hand.size();
if(n % W != 0) return false;
map<int,int> mp;
for(auto &i : hand) mp[i]++;
for(auto it = mp.begin();it != mp.end();){
while(it!=mp.end() && it->second <= 0) it++;
if(iter == mp.end()) break;
int cm = it->first,cnt = 0;
for(cnt = 0;cnt < W;++cnt) {
if(mp[cm] > 0){
mp[cm]--;
cm++;
}
else return false;
}
}
return true;
}