新手问题 是不是 C++ 能够解决的问题 Ruby 都能够解决?

levan · 2012年09月19日 · 最后由 Levan 回复于 2012年09月19日 · 3029 次阅读

(刚入门),指的是一些小程序,比如括号配对算法,队列算法。

是不是 C++ 对字符串等的处理更底层些所以处理方式更多些?

括号匹配算法: 1.初始化,i=0,建立堆栈,栈为空,输入表达式 2.检查表达式第 i 个字符 3.如果第 i 个字符是左括号,入栈 4.如果第 i 个字符是右括号,检查栈顶元素是否匹配 a.如果匹配,弹出栈顶元素 b.如果不匹配,报错退出

  1. i+1,是否已经表达式末尾 a.未到末尾,重复步骤 2 b.已到达末尾 a.堆栈为空,返回匹配正确 b.堆栈不为空,返回错误
#include <iostream>
#include <string>
#include <stack>

using namespace std;

int main(){
    stack<int> s;
    int cases;
    string str;
    cin>>cases;
    bool error=false;
    for(int i=0;i<cases;i++){
           while (!s.empty()) s.pop();
           error=false;
           cin>>str;
           for(int j=0;j<str.length()&&!error;j++){
                  swith (str[j]) {
                  case '(' : s.push(1); break;
                  case '[' : s.push(2); break;
                  case '{' : s.push(3); break;
                   case ')' : { if (s.top()!=1) error=true;else s.pop();break;}
                   case ']' : { if (s.top()!=2) error=true;else s.pop();break;}
                   case '}' : { if (s.top()!=3) error=true;else s.pop();break;}
                   }
             }
             if (error||!s.empty()) cout<<"error\n";else cout<<"ok\n";
       }
}

像这种针对字符串的处理,Ruby 能够很好的解决吗? (这个的 Ruby 代码?)

这个问题很容易。算法问题,ruby 都能写,就是(运行)效率不是那么高。

str = gets

stack = []

pairs = {
  '(' => ')',
  '[' => ']',
  '{' => '}'
}

error = false

str.chars.each do |char|
  case char
  when *pairs.keys
    stack.push char
  when *pairs.values
    if stack.pop != pairs.key(char)
      error = true and break
    end
  end
end

puts (error || stack.any?) ? 'error' : 'ok'
匿名 #4 2012年09月19日

#1 楼 @discover 不存在效率问题,算法的效率是用复杂度

#4 楼 @nuclearkitten 我主要指的是运行时间,因为我做算法题的时候,同样的算法,用 C++ 可以通过,用 ruby 会超时

匿名 #6 2012年09月19日

#5 楼 @discover 你这是语言的问题,不是算法的问题

不知所云。4-6

The simple answer is 能..... :D

哈哈哈哈~@discover @nuclearkitten @poshboytl thx~各位~ :)

@Rei THX~ 忘了@ 你了~ :)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号