您的位置:首页 > 其它

[程序人生]: 判断字符串是否为出栈序列

2015-10-28 19:43 309 查看
题目:

给出一个字符串Initial和另一个字符串Detection,判断Detection是否为Initial的一个出栈序列

如:Initial = 123456, Detection = 213654, 则Detection是Initial的一个出栈序列

思路一:可以使用栈

代码:

public static boolean bStackOrder(String Initial, String Detection){
if( Initial== null || Detection == null || Initial.length()==0 ||Detection.length() ==0 || Initial.length() != Detection.length() ){
return false;
}

boolean bResult = false;

char[] charInitial = Initial.toCharArray();
char[] charDetection = Detection.toCharArray();
Stack<Character> StackTemp = new Stack<Character>();
int iFalg = 0;

for(int i = 0; i<charDetection.length; i++ ){
if(iFalg <charInitial.length  &&  charDetection[i] == charInitial[iFalg]){  //需要检测的字符与原始字符下一个位置一样的话,则做一套出栈,入栈的操作,也就相当于临时栈不动,原始字符串的标志位后移一位
iFalg ++ ;
}
else{
if(StackTemp.size() == 0 || charDetection[i] != StackTemp.peek()){ //需要检测的字符是否与临时栈的栈顶一致,一致的话出战,不一致的话入栈
//临时栈先入栈到待检查字符的第一个位置
while(charInitial[iFalg] != charDetection[i]){
if(iFalg +1 < charInitial.length){
StackTemp.push(charInitial[iFalg]);
iFalg ++;
}else{
System.out.println("111111111111111111111111111111111111");
return false; //待检查字符串的字符就不在原始字符中
}
}

iFalg ++; //找到对应的字符, 则做一套出栈,入栈的操作,也就相当于临时栈不动,原始字符串的标志位后移一位
}
else{
//临时栈出栈
if(StackTemp.size() != 0){ //临时栈是否已经空了
System.out.println("Pop :" + StackTemp.peek());
StackTemp.pop();
}
else{
System.out.println("3333333333333333333333333333333333333");
return false;//临时栈是否已经空了,无法出栈,所以两个字符不匹配
}
}
}

}

if(iFalg != charInitial.length || StackTemp.size() != 0){
System.out.println("44444444444444444444444444444444444");
System.out.println("iFalg :" + iFalg);
System.out.println("StackTemp.size :" + StackTemp.size());
return false;
}
else{
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: