华为的一道机试,你会吗,用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;
}
}
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;
}
}
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;
}
// 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 们 咱们能不能静下心来不要这样的浮躁
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);
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);
}
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;
}
return false;
}
}
return true;
}
return bool;
}
}