スタックとキューを使用して、カッコ付き文字列を反転
タイトル説明:文字列str=「(ur)oi)」は、()はカッコ内部の文字列を反転させ、反転後の文字列を出力する必要があることを示します.サンプル出力は「iour」です.
構想:スタックを利用して括弧内の文字列を反転し、キューを利用して反転後の文字列を格納する.具体的な考え方は以下の通りです.
1.strを巡る文字.文字が')'でない場合、スタックに押し込む.
2.')'の場合、スタックの上部から要素が順次ポップアップされ、スタックの上部要素が'('、左かっこがポップアップされるまで、ポップアップ要素がキューに押し込まれます.
3.キュー要素を順次デキューし、デキュー要素をスタックに押し込む.
4.遍歴を続ける.
構想:スタックを利用して括弧内の文字列を反転し、キューを利用して反転後の文字列を格納する.具体的な考え方は以下の通りです.
1.strを巡る文字.文字が')'でない場合、スタックに押し込む.
2.')'の場合、スタックの上部から要素が順次ポップアップされ、スタックの上部要素が'('、左かっこがポップアップされるまで、ポップアップ要素がキューに押し込まれます.
3.キュー要素を順次デキューし、デキュー要素をスタックに押し込む.
4.遍歴を続ける.
public static String reverse(String str){
StringBuffer answer=new StringBuffer();
if(str==null||str.length()==0) return "";
char[] chars=str.toCharArray();
int length=chars.length;
Stack stack=new Stack<>();
Queue queue=new LinkedList<>();
//
char currentValue;
for(int i=0;i) queue).addLast(currentValue);
}
if(!stack.empty()){
stack.pop();
}
while(!queue.isEmpty()){
stack.push(((LinkedList) queue).pollFirst());
}
}
else{
//
stack.push(chars[i]);
}
}
for(char elem:stack){
answer.append(elem);
}
return answer.toString();
}