`
jythoner
  • 浏览: 601849 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

轩辕互动面试1题

阅读更多
有一组括号 ((((()()))()()())类似于这样的,写一个算法,判断这样的括号是不是成对的。

private string ReturnStr(string str)
	{
		string myStr = str;
		string[] strTemp = myStr.Split(',');
		do
		{
			strTemp = myStr.Split(',');
			for (int i = 0; i < strTemp.Length; i++)
			{
				if (strTemp[i] != "")
				{
					string starStr = strTemp[i];
					string endStr = i+2  <= strTemp.Length ? strTemp[i + 1] : "";
					if (starStr == "(" && endStr == ")")
					{
						strTemp[i] = "";
						strTemp[i + 1] = "";
					}
				}
			}
			myStr = "";
			for (int i = 0; i < strTemp.Length; i++)
			{
				if (strTemp[i] != "")
				{
					myStr += strTemp[i] + ",";
				}
			}
			myStr.TrimEnd(',');

	} while (myStr.Length>2);
	myStr.TrimEnd(',');
	return myStr;
	}

分享到:
评论
5 楼 爱园园真是太好了 2017-01-03  
package zj.hy.love;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 有一组括号 (((()()))()()())类似于这样的(括号为英文),
 * 写一个算法,判断这样的括号是不是成对的,如果成对则输出对应关系
 * @author ZJ
 * @since 2016-12-30
 */
public class Ques20161230_03 {
	
	
	private final Character preBracket = '(';
	private final Character suffBracket = ')';
	
	/**
	 * 判断这样的括号是不是成对的,如果成对则输出对应关系
	 * @param brackets
	 * @return
	 */
	public void printDoubleBracket(String brackets){
		
		char[] bracketArray = brackets.toCharArray();
		int len = bracketArray.length;//括号总数
		if(len%2!=0){// 括号总数为奇数不配对
			System.out.println("括号不成对!");
			return;
		}
		if(bracketArray[0]==suffBracket||bracketArray[len-1]==preBracket){
			System.out.println("括号不成对!");
			return; // 括号以‘)’开始或以'('结尾
		}
		Map<Integer,Integer> bracketMap = new HashMap<Integer,Integer>();
		
		/**
		 * 实现思路:遍历括号,每找到一个')',就判断其前(i-j)一个元素是否为'(',
		 * 如果是,则将当前括号与前一个括号替换为'*',将(i-j)为key,i为value放入map中
		 */
		for (int i = 0; i < len; i++) {//将配对的下标较小的作为map的key,较大的作为value			
			if(bracketArray[i] == suffBracket){	
				for (int j = 1; j <= i; j++) {
					if(bracketArray[i-j]==preBracket){
						bracketArray[i] = '*';
						bracketArray[i-j] = '*';
						bracketMap.put(i-j, i);
						break;
					}
				}
			}			
		}
		Iterator<Integer> keys = bracketMap.keySet().iterator();
		if(bracketMap.size()<len/2){//遍历玩数组后出现剩余括号全部为'('或')'
			System.out.println("括号不成对!");
			return;
		}
		while(keys.hasNext()){
			Integer key = keys.next();
			System.out.println(key+"对应"+bracketMap.get(key));
		}
	}
	
	
	//测试
	public static void main(String[] args) {
		
		Ques20161230_03 ques = new Ques20161230_03();
		String brackets = "(((()()))()()())";		
		ques.printDoubleBracket(brackets);		
	}
}

4 楼 爱园园真是太好了 2017-01-03  
楼主的代码有问题,不信大家看,用','分隔字符串???
3 楼 jinceon 2012-02-25  
)()(也得出true
ryan.liu 写道
这是栈的应用。代码不用这么复杂。
int pair = 0;
for (int i = 0; i < strTemp.Length; i++)
{
    if ('('==strTemp[i])
        pair++;
    else if (')'==strTemp[i])
        pair--;
    
}
return 0==pair;

2 楼 化蝶自在飞 2010-05-18  
应该先判断总数不是么?
1 楼 ryan.liu 2010-04-22  
这是栈的应用。代码不用这么复杂。
int pair = 0;
for (int i = 0; i < strTemp.Length; i++)
{
    if ('('==strTemp[i])
        pair++;
    else if (')'==strTemp[i])
        pair--;
    
}
return 0==pair;

相关推荐

Global site tag (gtag.js) - Google Analytics