???477 2017-01-22 12:52 采纳率: 100%
浏览 971
已采纳

在线等,Java 小白诚求编写一道很简单的算法题,立即给分

之前提过相同问题,但当时没仔细看结果就立即采纳了,刚发现答案是错的。

一道大学算法考试题,我没好好学java,现在求大神帮忙,编写出来能运行出正确结果立即采纳.

一个由N个括号组成的字符串S,开括号” ( “ 和闭括号 “ ) “ ,目标是将S分成两个部分,使得第一部分中的开放括号的数量等于第二部分中的闭合括号的数量。
更正式地说,我们正在寻找一个整数K
0 <= K <= N,
S的前k个字符中的开括号的数目与S的后面 (N - K)个字符中的闭括号的数目相同。
例如,给定S = “ ( ( ) ) ) ) ( ”,K等于4,因为:
S的前四个字符“ ( ( ) ) ”,包含两个开括号
S的剩余三个字符“ ) ) ( ”,包含两个闭括号。
写一个函数
class Solution {public int solution(string S); }
给定字符串S,返回满足上述条件的K的值。(K总是存在并且是唯一的)。
例如,给定S =“(( ))))(”,函数应该返回4,如上所述。
假设:
N是在范围[0 ... 100,000]内的整数,
字符串S仅由字符“(” 或“ ) ”组成。

  • 写回答

3条回答 默认 最新

  • Littlechoc 2017-01-22 14:28
    关注
        public int solution(String input) {
            if (input == null || input.length() == 0) {
                return -1; // Input Error
            }
    
            // Step1: 统计开闭括号个数
            int leftTotal = 0; // 开括号个数
            for (int i = 0; i < input.length(); i++) {
                char ch = input.charAt(i);
                if (ch == '(') {
                    leftTotal++;
                } else if (ch == ')') {
                    // Do nothing
                } else {
                    return -1; // Input Error
                }
            }
            int rightTotal = input.length() - leftTotal; // 闭括号个数
    
            // Step2: 遍历计算
            int leftCount = 0;
            for (int i = 1; i <= input.length(); i++) {
                char ch = input.charAt(i - 1);
                if (ch == '(') {
                    leftCount++;
                }
                int rightCount = rightTotal - (i - leftCount); // 关键
                if (rightCount == leftCount) { // Success
                    return i;
                }
            }
    
            return 0; // Not Found
        }
    
    

    NOTE:输入里不要出现空格

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥500 高有偿提问!求优化设计微信小程序
  • ¥15 matlab在安装时报错 无法找到入口 无法定位程序输入点
  • ¥15 收益高的广告联盟有哪些
  • ¥15 Android Studio webview 的使用问题, 播放器横屏全屏
  • ¥15 删掉jdk后重新下载,Java web所需要的eclipse无法使用
  • ¥15 uniapp正式环境中通过webapi将本地数据推送到设备出现的跨域问题
  • ¥15 xui建立节点,显示错误
  • ¥15 关于#单片机#的问题:开始、复位、十进制的功能可以实现,但是切换八进制的功能无法实现(按下按键也没有效果),把初始状态调成八进制,也是八进制可以实现但是切换到十进制不行(相关搜索:汇编语言|计数器)
  • ¥15 VINS-Mono或Fusion中feature_manager中estimated_depth是特征的深度还是逆深度?
  • ¥15 谷歌浏览器如何备份抖音网页数据