给定一个非空的字符串 ,检查是否可以通过由它的一个子串重复多次构成。
class Solution {
public:
bool repeatedSubstringPattern(string s) {
string news=s+s;
news.erase(news.begin());
news.erase(news.size()-1);
if(news.find(s)!=std::string::npos)
{return true;}
else
return false;
}
};
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push
、pop
、peek
、empty
):
实现 MyQueue
类:
void push(int x)
将元素 x 推到队列的末尾int pop()
从队列的开头移除并返回元素int peek()
返回队列开头的元素boolean empty()
如果队列为空,返回true
;否则,返回false
class MyQueue { public: stack<int>instack; stack<int>outstack; MyQueue() { } void push(int x) { instack.push(x); } int pop() { if(outstack.empty()) { while(!instack.empty()) { outstack.push(instack.top()); instack.pop(); } } int result=outstack.top(); outstack.pop(); return result; } int peek() { int result=this->pop(); outstack.push(result); return result; } bool empty() { return instack.empty()&&outstack.empty(); } };
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push
、top
、pop
和 empty
)。
实现 MyStack
类:
void push(int x)
将元素 x 压入栈顶。int pop()
移除并返回栈顶元素。int top()
返回栈顶元素。boolean empty()
如果栈是空的,返回true
;否则,返回false
。
class MyStack {
queue<int>que;
public:
MyStack() {
}
void push(int x) {
que.push(x);
}
int pop() {
int size=que.size();
size--;
while(size--)
{
int tmp=que.front();
que.push(tmp);
que.pop();
}
int result=que.front();
que.pop();
return result;
}
int top() {
return que.back();
}
bool empty() {
return que.empty();
}
};
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
class Solution { public: bool isValid(string s) { stack<char>st; for(int i=0;i<s.size();i++) { if(s[i]=='(')st.push(')'); else if(s[i]=='{')st.push('}'); else if(s[i]=='[') st.push(']'); else if(st.empty()||st.top()!=s[i]) return false; else st.pop(); } return st.empty(); } };