题解:根据描述,找出A与B字符不同的位置,如果没有这样的位置,那么需要在A中找到重复的字符即可判断是亲密的。如果有这样的位置,那么在这样的位置有两个情况,判断这两处位置交换后是否一样。如果这样的位置个数不是2个,肯定不是亲密字符串。
bool buddyStrings(string A, string B)
{
if(A.size()!=B.size()) return false;
vector<int>diff;
for(int i=0;i<A.size();i++)
{
if(A[i]!=B[i]) diff.push_back(i);
}
if(diff.size()==0){
//说明ab一样,那么则需要在a中找到重复的字符
map<char,int>m;
for(int i=0;i<A.size();i++)
{
m[A[i]]++;
if(m[A[i]]>1) return true;
}
return false;
}
else if(diff.size()==2)
{
return ((A[diff[0]])==(B[diff[1]]))&&(A[diff[1]]==B[diff[0]]);
}
return false;
}
题解:不知道怎么描述。把每次计算的分数,顺带把由哪个位置括号计算的到的一起压入。
int scoreOfParentheses(string S) {
int ret = 0;
stack<int>brackets;
stack<pair<int,int>>scores;//前一个int存socre,后一个int存下标
for(int i=0;i<S.size();i++){
if(S[i]=='(') {
brackets.push(i);
}
else {
if(i-brackets.top()==1) {
scores.push(make_pair(1,brackets.top()));
brackets.pop();
}
else{
int tmp = 0;
int d = brackets.top();
while(!scores.empty()&&scores.top().second>d)
{
tmp+=scores.top().first;
scores.pop();
}
scores.push(make_pair(2*tmp,d));
brackets.pop();
}
}
}
while(!scores.empty()){
ret+=scores.top().first;
scores.pop();
}
return ret;
}
题解:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有