算法题:除去字符串里面的括号

/*
给定一个如下输入格式的字符串,(1,(2,3),(4,(5,6),7))
括号内的元素可以是数字,也可以另一个括号,请实现一个算法消除嵌套
的括号。比如把上面的表达式变成:(1,2,3,4,5,6,7),
如果表达式有误请报错。
*/
#include <iostream>
using namespace std;

int Grial(char *&dist,const char *str)
{
    //判断表达式是否合理,此处我就不用栈了,
    //栈还挺浪费空间的,直接上一个标识flags=0,
    //遇到‘(‘,flags++,遇到‘)‘,flags--,if(flags==0)
    //则这个表达式正确,否则-1返回 。
    int flags = 0;
    dist = new char[strlen(str)+1];
    char *q = dist;
    const char *p = str;
    while (*p!=‘\0‘)
    {
        if (*p == ‘(‘)
            flags++;
        if (*p == ‘)‘)
            flags--;
        p++;
    }
    if (flags != 0)return -1;
    p = str;
    while (*p != ‘\0‘)
    {
        if (*p == ‘(‘ || *p == ‘)‘)
        {
            p++;
            continue;
        }
        else
        {
            *q++ = *p++;
        }
    }
    *q = ‘\0‘;
    return 0;
}
int main()
{
    char src[] = "(1,2,(3,4,5),6,(8,(9,10),11))";
    char *dist = NULL;
    cout<<Grial(dist,src)<<endl;
    cout << dist;
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-06 11:06:49

算法题:除去字符串里面的括号的相关文章

百度的一道二面算法题分析:补全括号序列

算法题:补全括号序列 百度二面遇到的一个问题 大概意思就是 给出一个中括号序列,在序列前后可以加中括号字符,补全它... 当时没想起来解决办法,然后凉凉了,后来专门去搞了这道题,终于搞定 思路在注释里写的比较详细了,此处不再赘述(用了类似栈的思想) <?php /** * 字符串转数组 * @param $str string 输入的字符串 * @return array 转换之后的结果数组 */ function strToArray($str) { // 强制转换为字符串 $str = (s

实习生面试--算法题之字符串最长公共子序列长度

题目:求两字符串的最长公共子序列的长度. 题外话:最长公共子串,子序列问题是被充分讨论的问题,网上一搜一大把,请bing之. 本题只要求求最长公共子序列的长度,而不需要记录最长的公共子序列,给予了我们便利,请参考代码: 1 int max(int a, int b) 2 { 3 return a > b ? a : b; 4 } 5 6 int lcs(char* str1, char* str2) 7 { 8 if (str1 == nullptr || str2 == nullptr) 9

面试10大算法题汇总-字符串和数组6

11.String转int,即atoi函数实现. 主要考虑以下几种情况: 1.      String为空 2.      String中存在非数字字符,如空白字符,abcd等 3.      String的正负 Code: public class test { public static int atoi(String str) { if (str == null || str.length() < 1) return 0; str = str.trim(); char flag = '+'

数据结构算法题-数组字符串

1.查找最小的 k 个元素(数组) 题目:输入 n 个整数,输出其中最小的 k 个. 例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4. k_big.c 2.查找最小的 k 个元素(数组) 题目:输入 n 个整数,输出其中最小的 k 个. 例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4 k_big.c 3.判断一个字符串是否对称 1 bool CheckStr(const char*

面试10大算法题汇总-字符串和数组7

14.实现strStr():搜索一个字符串在另一个字符串中的第一次出现的位置 例: #include <stdio.h> #include <string.h> int main () { char str[] ="This is a simple string"; char * pch; pch = strstr (str,"simple"); cout<<(*pch)<<endl; return 0; } 输出:s

面试10大算法题汇总-字符串和数组1

题目链接: http://blog.csdn.net/xiaoranlr/article/details/43963933 1. 计算逆波兰式 题目要求如下: ["2","1", "+", "3", "*"] -> ((2 + 1) * 3)-> 9 ["4","13", "5", "/", "+"

面试10大算法题汇总-字符串和数组2

3.分词 给定一个字符串s和一个单词字典,确定s是否可被字典分解为多个单词 如: 给定s="leetcode" dict=["leet","code"] 由于"leetcode"可被分割为"leet code",返回True 最简单的一种方法是遍历dict中的单词,查看其是否在s的起始位置,若在则继续查看s剩下部分,否则返回false import java.util.HashSet; import jav

面试10大算法题汇总-字符串和数组8

17.最长连续序列 给定一个无序数组,求最长连续序列的长度.要求负责度为O(n) 例:数组num:[100, 4, 200,1, 3, 2]的最长连续序列为[1,2,3,4],长度为4 解法一:建立一个bool数组,用于表示该数字是否存在,之后求数组中连续为true的最长值即可.在[100, 4, 200, 1, 3, 2]中,其最小值为1,最大值为200,因此建立长度为iMax-iMin+1(200-1+1) = 200的数组bExist,之后对数组赋值,其中bExist[100 - 1] ,

面试10大算法题汇总-字符串和数组5

7.合并重复区间 给定一组区间,合并其中重复的.例: 给定[1,3],[0,7],[2,6],[8,10],[15,18],其中[1,3]与[0,7]及[2,6]区间有重复,因此将其合并成一个区间:[0,7].最终返回: [0,7],[8,10],[15,18]. 书上的解法用到了Comparator,其大致思路如下: 1.      创建一个间隔类Interval,其成员变量为start和end,分别表示间隔区间的开始和结束. 2.      创建一个Solution类,其包含merge方法,