• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > java算法,问题如下?

java算法,问题如下?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了分酒问题java算法,算法 java,java求质数算法,java递归算法,java算法大全带答案等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:java算法,问题如下?
描述:

问:假设有一字符串长度无穷大,内容只有{} 六个。
结果:返回Boolean
规则: 必须成对出现,可以嵌套,但不能错位。如:
A = "{[()()[]{}]}...({[]}{}())" True
B = "{]{(){}[]}()}()}...((((){}[]" False 因:红色部分出现错位
要求:利用JAVA或JavaScript算法实现


解决方案1:

    public static boolean check(String str) {
    
    char[] chars = str.toCharArray();
    int[][] a = {
            {0,0},
            {0,0},
            {0,0}
    };
    for (char c : chars) {
        switch (c) {
        case '(':
            a[0][0]++;
            break;
        case ')':
            a[0][1]++;
            if(a[0][1] > a[0][0]){
                return false;
            }
            break;
        case '{':
            a[1][0]++;
            break;
        case '}':
            a[1][1]++;
            if(a[1][1] > a[1][0]){
                return false;
            }
            break;
        case '[':
            a[2][0]++;
            break;
        case ']':
            a[2][1]++;
            if(a[2][1] > a[2][0]){
                return false;
            }
            break;
        default:
            break;
        }
    }
    for (int i = 0; i < a.length; i++) {
        if(a[i][1] != a[i][0]){
            return false;
        }
    }
    return true;
}
public static void main(String[] args) {
    String[] strs = {
            "{}",
            "{[()()[]{}]}({[]}{}())",
            "{]{(){}[]}()}()}((((){}[]"
    };
    for (String string : strs) {
        System.out.println(check(string) + "\t" + string);
    }
    
}

解决方案2:

利用栈可以做到。一个一个字符地看,遇到左括号就压栈,遇到右括号就判断栈顶元素是否为对应的左括号,如果对应,栈顶元素出栈,继续判断下一个字符;如果不对应,则配对错误,返回false。如果到最后一个字符也可以找到栈顶元素匹配,而且这时栈为空,则返回true,否则false。《数据结构》教材好像有,严蔚敏版。

解决方案3:

Leetcode 原题:
https://leetcode.com/problems/valid-parentheses/

答案在
https://leetcode.com/discuss/questions/oj/valid-parentheses
里找

https://leetcode.com/discuss/11196/my-solution-one-stack-case-statemen...

解决方案4:

更新3:谢@brayden同学提醒,已经改正并简化了代码。


更新2:发现自己怎么这么热心,顺便把JavaScript版本也写了吧,放在最后。


更新1:下班回家重新整理了一下格式,原理正如楼下@DerrickChan同学所说,利用了栈的数据结构。

最近比较忙,如果需要JavaScript版本的话请告知。


来个Java的吧,提供个思路,想翻译成JavaScript也不难,就先不写了。

代码如下:

UnitTest.java

public class UnitTest {
    public static void main(String[] args) {
        Checker checker = new Checker();
        String s1 = "{[()()[]{}]}({[]}{}())";
        String s2 = "{]{(){}[]}()}()}((((){}[]";
        System.out.println(checker.check(s1));
        System.out.println(checker.check(s2));
    }
}

Checker.java

public class Checker {
    private char[][] css = { { '(', ')' }, { '[', ']' }, { '{', '}' } };
    private char[] cs = null;
    private char[] stack = null;
    private int index = 0;

    public boolean check(String s) {
        cs = s.toCharArray();
        stack = new char[cs.length];
        for (char c : cs)
            if (!isEndding(c))
                push(c);
            else if (!isPair(pop(), c))
                return false;
        if (index == 0)
            return true;
        index = 0;
        return false;
    }

    public void push(char c) {
        stack[index++] = c;
    }

    private char pop() {
        return index == 0 ? '\0' : stack[--index];
    }

    private boolean isEndding(char c) {
        for (int i = 0; i != css.length; ++i)
            if (c == css[i][1])
                return true;
        return false;
    }

    private boolean isPair(char c1, char c2) {
        for (int i = 0; i != css.length; ++i)
            if (c1 == css[i][0] && c2 == css[i][1])
                return true;
        return false;
    }
}

UnitTest.js

var s1 = "{[()()[]{}]}({[]}{}())";
var s2 = "{]{(){}[]}()}()}((((){}[]";
var css = "()[]{}";
var stack = {};
var index = 0;
console.log(check(s1));
console.log(check(s2));

function check(cs) {
    for (var i = 0; i != cs.length; ++i) {
        var c = cs[i]
        if (!isEndding(c))
            push(c);
        else if (!isPair(pop(), c))
            return false;
    }
    if (index == 0) 
        return true;
    index = 0;
    return false;
}

function push(c) {
    stack[index++] = c;
}

function pop() {
    return index == 0 ? '\0' : stack[--index];
}

function isEndding(c) {
    console.log();
    for (var i = 0; i != css.length; i = i + 2)
        if (c == css[i + 1])
            return true;
    return false;
}

function isPair(c1, c2) {
    for (var i = 0; i != css.length; i = i + 2)
        if (c1 == css[i] && c2 == css[i + 1])
            return true;
    return false;
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • java算法,问题如下?

相关文章

  • 2017-06-07 python绝对路径文件无法写入
  • 2017-06-07 如何将wxDialog作为控件放到另一个wxDialog中
  • 2017-06-07 hibernate有一级和二级缓存为什么还要使用ehcache缓存?
  • 2017-06-07 给新类型定义成员方法时,带与否二者区别在哪
  • 2017-06-07 哪里创建队列
  • 2017-06-07 flask文章列表页的分页导航该如果处理?
  • 2017-06-07 (flask)如何实现一个即时的消息系统
  • 2017-06-07 redis添加数据不是加在原数据的后面?
  • 2017-06-07 Python中如何用正则匹配中文词组
  • 2017-06-07 pycharm智能提示不全面

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 为什么我上传了js和css,七牛不能正确辨认mimeType?
    • golang(golang)bee创建api应用遇到的问题
    • pythonsplitmethodAttributeError
    • tornado-redis:为什么tornado-redis的'listen'和'brpop'不能同时监听
    • flaskTemplateNotFound问题。
    • 如何正则匹配成对标签对中的内容?
    • 上传的文件为什么不能按时间排序?
    • discuz集成7牛后图片无法显示
    • 七牛获取图片有点慢,经常出现图片图裂,点击刷新重新加载这张图片还是出不了,会不会和我们是用免费的有关。
    • 计算机使用8bit作为一个单元,历史原因有哪些?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有