首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

华为的一路机试,你会吗,用java写出来

2013-09-28 
华为的一道机试,你会吗,用java写出来华为机试[解决办法]public int find(String inputstr){String sint a

华为的一道机试,你会吗,用java写出来
华为的一路机试,你会吗,用java写出来 华为 机试
[解决办法]
   public int find(String inputstr){
        String s;
        int a = 1;
        if(inputstr.contains("[")){
            if(inputstr.contains("]")){
                if(inputstr.indexOf("[") < inputstr.indexOf("}")){
                s = inputstr.substring(inputstr.indexOf("["),inputstr.indexOf("}")+1);
                if(s.contains("(")){
                    if(s.contains(")")){
                        if(s.indexOf("(") < s.indexOf(")")){
                            a = 0;
                        }
                        else{
                            a = 1;
                        }
                    }else{
                        a = 1;
                    }
                }else{
                    a = 1;
                }
                }else{
                    a = 1;
                }
            }else{
                a = 1;
            }
        }else{
            if(!inputstr.contains("]") && !inputstr.contains("(") && !inputstr.contains(")"))
            {
                a = 0;
            }
        }
        return a;

    }
数组的比较烦,思路差不多
[解决办法]
public static int checkStr(String s){

int resultValue = 0;//初始返回值
LinkedList<Byte> ll= new LinkedList<Byte>();//用于存放括号的栈
byte[] bs = s.getBytes();
//遍历String
for(byte b : bs){
//如果是左括号,存入栈
if(b == '('
[解决办法]
b == '['){
ll.add(b);
}else if(b == ')'){
//如果是‘)’,取栈中最后的括号,判断是否匹配
//若不匹配,则返回1;
if(ll.getLast() != '('){
resultValue = 1;
break;
}
}else if(b == ']'){
if(ll.getLast() == '['){
resultValue = 1;
break;
}
}
}
return resultValue;
}
[解决办法]


public static int isMatch(String str){
int  result = 0;
LinkedList<Character> list = new LinkedList<Character>();


if(str != null && str.trim().length() > 0){
char[] chars = str.toCharArray();
for(Character c : chars){
if(c == '[' 
[解决办法]
 c == '('){
list.push(c);
}
if(c == ')'){
Character character = list.pop();
if(!(character == '(')){
result = 1;
break;
}
}
if(c == ']'){
Character character = list.pop();
if(!(character == '[')){
result = 1;
break;
}
}
}
}
if(list.size() > 0){
result = 1;
}
return result;
}


[解决办法]
/**
 * @param args
 */
public static void main(String[] args) {
boolean flag = checkBracket("terminal user[name 
[解决办法]
 number (1)]");
if (flag) {
System.out.println(0);
}else{
System.out.println(1);
}

}

private static boolean checkBracket(String str){
if (str.contains("(") 
[解决办法]
 str.contains("[") ) {
int sortA = str.indexOf("(");
int sortB = str.indexOf("[");

if (str.contains("(") && sortB != -1 && sortA < sortB 
[解决办法]
 str.contains("(") && sortB == -1 ) {
int num = str.indexOf(")");
if (num == -1) {
return false;
}
String str2 = str.substring(str.indexOf("(")+1, str.lastIndexOf(")"));
return checkBracket(str2);
}else if (str.contains("[")) {
int num2 = str.indexOf("]");
if (num2 == -1) {
return false;
}
String str3 = str.substring(str.indexOf("[")+1, str.lastIndexOf("]"));
return checkBracket(str3);
}

}else if (str.contains(")") 
[解决办法]
 str.contains("]")) {
return false;
}{
return true;
}

}

[解决办法]
引用:
/**
 * @param args
 */
public static void main(String[] args) {
boolean flag = checkBracket("terminal user[name 
[解决办法]
 number (1)]");
if (flag) {
System.out.println(0);
}else{
System.out.println(1);
}

}

private static boolean checkBracket(String str){
if (str.contains("(") 
[解决办法]
 str.contains("[") ) {
int sortA = str.indexOf("(");
int sortB = str.indexOf("[");

if (str.contains("(") && sortB != -1 && sortA < sortB 
[解决办法]
 str.contains("(") && sortB == -1 ) {
int num = str.indexOf(")");
if (num == -1) {
return false;
}
String str2 = str.substring(str.indexOf("(")+1, str.lastIndexOf(")"));
return checkBracket(str2);
}else if (str.contains("[")) {
int num2 = str.indexOf("]");
if (num2 == -1) {
return false;
}
String str3 = str.substring(str.indexOf("[")+1, str.lastIndexOf("]"));
return checkBracket(str3);
}

}else if (str.contains(")") 
[解决办法]
 str.contains("]")) {
return false;
}{
return true;
}

}

terminal user[(df)name 
[解决办法]
 number (1)]
[解决办法]


private static int checkString(String test) {
// 定义一个数组用于存放暂时未匹配的字符
char[] cbase = new char[test.length()];
// 定义角标位
int index = 0;
for (int i = 0, length = test.length(); i < length; i++) {


char c = test.charAt(i);
// 如果是 ( 或 [ 记录下来
if (c == '[' 
[解决办法]
 c == '(') {
cbase[index++] = c;
}
// 如果是 ) 或 ] 如果 cbase中最后一位与之不匹配的值,则字符串不合法,直接返回1,注意做index < 0的判断,否则可能角标越界。8楼使用list也需注意这一点。
if ((c == ']' && (--index < 0 
[解决办法]
 cbase[index] != '[')) 
[解决办法]
 (c == ')' && (--index < 0 
[解决办法]
 cbase[index] != '('))) {
return 1;
}
}
// 若果所有括号都匹配了,角标位会归0
return index == 0 ? 0 : 1;
}


[解决办法]

import java.util.Stack;

/**
 * 
 * 检查字符串括号是否匹配
 * http://bbs.csdn.net/topics/390588076
 * 
 */

public class Test002 {
public static void main(String[] args) {
//测试
final String[] testStrings = new String[] {
"abc",//0
"aa[(])abc",//1
"[aa([bb])cc]",//0
"aa[(]bb",//1
"(bbaa",//1
};
for(int i = 0;i < testStrings.length;++i) {
System.out.printf("test%d:%s  result:%d\n",i,testStrings[i],check(testStrings[i]));
}
}

private static int check(String str) {
Stack<Character> stack = new Stack<Character>();
char[] arr = str.toCharArray();
for (char c : arr) {
//遇到'('和'['直接入栈
if(c == '(' 
[解决办法]
 c == '[') stack.add(c);
//遇到')'和']'检查栈顶元素,如果匹配删除栈顶元素继续遍历,否则返回1
else if (c == ')' 
[解决办法]
 c == ']') {
//栈中无元素
if(stack.isEmpty()) return 1;
char top = stack.pop();
if((c == ')' && top =='(') 
[解决办法]
 (c == ']' && top == '[')) continue;
else return 1;
}
//忽略其他字符
}
//如果括号完全匹配,此时栈应该为空
return stack.isEmpty() ? 0 : 1;
}
}

[解决办法]
引用:
Quote: 引用:

public static int checkStr(String s){

int resultValue = 0;//初始返回值
LinkedList<Byte> ll= new LinkedList<Byte>();//用于存放括号的栈
byte[] bs = s.getBytes();
//遍历String
for(byte b : bs){
//如果是左括号,存入栈
if(b == '('
[解决办法]
b == '['){
ll.add(b);
}else if(b == ')'){
//如果是‘)’,取栈中最后的括号,判断是否匹配
//若不匹配,则返回1;
if(ll.getLast() != '('){
resultValue = 1;
break;
}
}else if(b == ']'){
if(ll.getLast() == '['){
resultValue = 1;
break;
}
}
}
return resultValue;
}

方法可行,比较清晰
public  int checkStr(String s){

int resultValue = 0; // 初始返回值
LinkedList<Byte> ll = new LinkedList<Byte>(); // 用于存放括号的栈
byte[] bs = s.getBytes();
// 遍历String
for (byte b : bs) {
// 如果是左括号,存入栈
if (b == '(' 
[解决办法]
 b == '[') {
ll.add(b);
} else if (b == ')') {
// 如果是‘)’,取栈中最后的括号,判断是否匹配
// 若不匹配,则返回1;
if (ll.getLast() != '(') {
resultValue = 1;
break;
}
} else if (b == ']') {
if (ll.getLast() != '[') {
resultValue = 1;
break;
}
}
}
return resultValue;
}






System.out.println(checkStr("([]([]))"));//这样就出问题了

[解决办法]
public boolean valid(String input){
char[] chars = input.toCharArray();
ArrayList<Character> list1 = new ArrayList<Character>();


for(int i=0;i<chars.length;i++){
char c = chars[i];
if(c=='('
[解决办法]
c=='['){
list1.add(c);
}else if(c==')'
[解决办法]
c==']'){
if(list1.size()==0) return false;
if((c==']'&&list1.get(list1.size()-1).charValue()=='[')

[解决办法]
(c==')'&&list1.get(list1.size()-1).charValue()=='(')){
list1.remove(list1.size()-1);
}
}
}
if(list1.size()>0) return false;
return true;
}


[解决办法]
呵呵,刚好星期一遇到一家公司,也是这题,百度了下,果断用栈,代码在下面,C++写的:
// BracketsMatch.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
using namespace std;

#define STACKSIZE 10000

struct stack{//定义一个栈结构体
char strStack[STACKSIZE];//每行能存储小于10000个字符
int top;//栈顶
};

void InitStack(stack &s)//初始化
{
s.top = -1;
}

char Push(stack &s, char a)//入栈
{
if (s.top == STACKSIZE - 1)
{
return 0;
}
s.top++;//先栈顶加1
s.strStack[s.top] = a;//把元素赋给栈顶
return a;
}

char Pop(stack &s)//出栈
{
if (s.top == -1)
{
return 0;
}
char a = s.strStack[s.top];//先把元素取出来赋给变量a
s.top--;//栈顶减一
return a;
}

int Empty(stack &s,int r)//判断是否为空
{
if(s.top == -1)
{
return 1;
}
else
return 0;
}

int Check(char* str)//检查括号是否匹配
{
stack s;
InitStack(s);
int slength = strlen(str);//获取长度
for (int i = 0;i<slength ; i++)
{
char a = str[i];
switch (a)
{
case '(':
case '[':
Push(s,a);//是左边括号就入栈
break;
case ')':
if (Pop(s)!='(')//遇到右边括号,如果出栈不是左边括号返回0,break执行下一个str[i];
{
return 0;
}
break;
case ']':
if (Pop(s)!='[')
{
return 0;
}
break;
default:
break;
}
}
int r = 0;
r = Empty(s,r);
if (r == 1)
{
return 1;//栈为空
}
else
return 0;//栈不为空
}

void main()
{
char str[10000];
int n;
cout<<"请输入测试数据的数量:";
cin>>n;
for (int i = 0; i<n; i++)
{
cout<<"请输入第"<<(i+1)<<"个只包含{'(',')','[',']'}四种字符并且长度小于10000的字符串:";
cin>>str;
int checkResult = Check(str);
if (checkResult == 1)
{
cout<<"YES"<<endl<<endl;
}
else if (checkResult == 0)
{
cout<<"NO"<<endl<<endl;
}
}
}

[解决办法]
引用:
我想说 上面几楼用JAVA的人 没有一个人关注了 内存限制128M的条件

只有那个C++哥注意了,

各位Javaer 们  咱们能不能静下心来不要这样的浮躁


+1
[解决办法]

string str = "qweqwe[])(wq";

if (str.IndexOf(')') > -1 && str.IndexOf('(') > -1 && str.IndexOf('[') > -1 && str.IndexOf(']') > -1)//[]()都有
{
        str.ToArray();
        int sum = 0;
        foreach (char c in str)
        {
            if (c == '[' 
[解决办法]
 c == ']' 
[解决办法]
 c == '(' 
[解决办法]
 c == ')')
                sum++;
        }
        if (sum == 4)//括号没有重复
        {
            int[] arr = new int[4];
            arr[0] = str.IndexOf('[');
            arr[1] = str.IndexOf(']');
            arr[2] = str.IndexOf('(');


            arr[3] = str.IndexOf(')');
            int temp;
            for (int i = 1; i < arr.Length; i++)  //冒泡
            {
                for (int j = 0; j < arr.Length - i; j++)
                {
                    if (arr[j] > arr[j + 1])
                    {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            if (arr[1] == str.IndexOf(']') &&  arr[2] == str.IndexOf('['))//括号错误情况(中间2位) ][ )( [) (] 
                Console.WriteLine(1);
            else if(arr[1] == str.IndexOf(')') &&  arr[2] == str.IndexOf('('))
                Console.WriteLine(1);
            else if(arr[1] == str.IndexOf('[') &&  arr[2] == str.IndexOf(')'))
                Console.WriteLine(1);
            else if(arr[1] == str.IndexOf('(') &&  arr[2] == str.IndexOf(']'))
                Console.WriteLine(1);
            else
                Console.WriteLine(0);
        }
        else
            Console.WriteLine(1);
}
else if(str.IndexOf('[')<0 && str.IndexOf(']')<0 && str.IndexOf('(') < 0 && str.IndexOf(')') < 0)//没有括号
{
    Console.WriteLine(0);
}
else
    Console.WriteLine(1);


[解决办法]
//括号错误情况(中间2位) ][ )( [) (] ]) )] ([
[解决办法]

public static void main(String[] args) {
String str=args[0];
String kuehaod = ".*(\\[\\]
[解决办法]
\\(\\)).*"; //匹配有连续配对的括号
String kuehaom = ".*(\\(
[解决办法]
\\)
[解决办法]
\\[
[解决办法]
\\]).*"; //匹配有任意括号
        //如果有连续配对的括号直接回返0,没有的话就检查字符串有没有包括任意括号
int result = str.matches(kuehaod)?0:str.matches(meikuehaom)?1:0;
System.out.println(result);
}

[解决办法]
引用:

public static void main(String[] args) {
String str=args[0];
String kuehaod = ".*(\\[\\]
[解决办法]
\\(\\)).*"; //匹配有连续配对的括号
String kuehaom = ".*(\\(
[解决办法]
\\)
[解决办法]
\\[
[解决办法]
\\]).*"; //匹配有任意括号
        //如果有连续配对的括号直接回返0,没有的话就检查字符串有没有包括任意括号


int result = str.matches(kuehaod)?0:str.matches(meikuehaom)?1:0;
System.out.println(result);
}


args[0] 可以替换成你要测试的字符串
[解决办法]

public static int testString(String input){
int flag=0;
//转化成char数组
char[] oldChar=input.toCharArray();
//new一个新数组 存放 "[" "(" ")" "]"
char[] newChar=new char[oldChar.length];
//遍历char数组 如果存在括号  则存入新的char[]中
for(int i=0;i<oldChar.length;i++ ){
if(oldChar[i] =='[' 
[解决办法]
 oldChar[i] ==']' 
[解决办法]
 oldChar[i] =='(' 
[解决办法]
 oldChar[i] ==')'){
newChar[flag]=oldChar[i];
flag++;
}
}
//将新的数组转换成String 如果String中存在连续的 "[]" 或者"()" 则返回1 否则返回0
String result=new String(newChar);
if(result.indexOf("[]") !=-1 
[解决办法]
 result.indexOf("()") != -1){
return 1;
}
return 0;
}

[解决办法]

public static boolean checkIsBracketsTwining(String sourceString,
    Character[] tags) {

if (tags.length != 2)
    return false;

Stack<Character> stack = new Stack<Character>();
boolean isValid = true;
for (Character c : sourceString.toCharArray()) {

    if (!stack.isEmpty() && stack.peek() == tags[0]
    && c == tags[1]) {
isValid = true;
stack.pop();
    } else {
stack.push(c);
isValid = !(c == tags[0] 
[解决办法]
 c == tags[1]);
    }
}

return isValid;
    }
下班时候网络不好每提交成功,看来已经倍解答玩了,思路就是栈的操作,碰到哦成对弹出去,然后判断
[解决办法]

String s="terminal user [no 
[解决办法]
 name (1)]";
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
char chx = s.charAt(i);
switch (chx) {
case '(':
case '[':
stack.push(chx);
break;
case ')':
if (stack.isEmpty()) {
stack.push(chx);
} else {
if (stack.pop() != '(') {
System.out.println(1);
return;
}
}
break;
case ']':
if (stack.isEmpty()) {
stack.push(chx);
} else {
if (stack.pop() != '[') {
System.out.println(1);
return;
}
}
break;
default:
break;
}
}
if (stack.isEmpty()) {
System.out.println(0);
}else
{
System.out.println(1);
}

[解决办法]
遍历字符串,是(和[,存入数组:
1、如果数组长度不是整数,返回 0
2、对折对比,都为真,返回 0,否则 1
[解决办法]
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.err.println(getBoolean(scanner.next()));
}

//判断一个字符串是否匹配()[]关系
private static boolean getBoolean(String string) {
boolean bool = false;
List<Character> charList = new LinkedList<Character>();

if(string.length()>0){
//将这个字符串中的所有()[]符号放到一个堆栈中
for(int i=0;i<string.length();i++){
if(string.charAt(i)=='('
[解决办法]
string.charAt(i)==')'
[解决办法]
string.charAt(i)=='['
[解决办法]
string.charAt(i)==']'){
charList.add(string.charAt(i));
}
}
//判断这个堆栈中是否每个'('或'['符号后面是否紧跟一个')'或']'相匹配,如果存在,继续遍历,只要存在一个不匹配,直接返回false
for (int i=1;i<charList.size();i++) {
if((charList.get(i-1)=='(' && charList.get(i)!=')') 
[解决办法]
 (charList.get(i-1)=='[' && charList.get(i)!=']')){


return false;
}
}
return true;
}
return bool;
}
}

热点排行