倒着处理的思维--包含字符串匹配和九度1510 替换空格 剑指offer03

倒着来是处理字符串等的一个不错的技巧。举个例子,和这道题无关的,但是难度和意义都是更好的。

比如非完全匹配,就是差一个字符不匹配

那么其实有一种复杂度还不错的做法:

模式串:aacb

需要匹配的字符串:

1、aamb

2、acb

3、aamdb

这个时候其实可以先正向匹配,算出来匹配的字符的个数p1,再反向匹配,算出来匹配的个数p2,然后看p1+p2与模式串的长度的关系

恩,以上...还没做过具体题目

再看这道题,也是倒着处理字符串的思路:O(n)处理掉

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

const int SIZE = 1000000+1;
char str[SIZE];
char ans[SIZE*2];
int leng;

void solve(){
    leng = strlen(str);
    int blank = 0;
    for(int i=0;i<leng;i++){
        if(str[i] == ' ')blank++;
    }
    int ansleng = blank*2+leng;
    int oldptr = leng-1;

    int newptr = ansleng-1;
    ans[ansleng] = '\0';
    while(oldptr>=0){

        if(str[oldptr] == ' '){
            ans[newptr]='0';
            ans[--newptr]='2';
            ans[--newptr]='%';
        }else{
            ans[newptr]=str[oldptr];
        }
        //cout << newptr << "  " << oldptr << endl;
        --newptr;
        --oldptr;
    }
    printf("%s\n",ans);
}

int main(){
    //freopen("03.txt","r",stdin);
    while(cin.getline(str,SIZE)){
        //cout << str << endl;
        solve();
    }
    return 0;
}

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

时间: 2024-11-10 07:42:11

倒着处理的思维--包含字符串匹配和九度1510 替换空格 剑指offer03的相关文章

iptables实现字符串匹配

iptables实现字符串匹配 分类: SHELL&linux命令2012-07-03 18:25 3172人阅读 评论(0) 收藏 举报 stringinputtcpoutputhexlinux 通过string匹配域名来过滤,范例如下: iptables -I OUTPUT -p tcp -m string --string "qq.com" --algo bm -j DROP iptables -I OUTPUT -p udp -m string --string &qu

时空权衡之字符串匹配中的输入增强技术

字符串匹配的蛮力的算法: 对于字符数为n的文本,模式(要匹配的字符串)字符为m的字符串,简单的从左到右比较模式和文本中每一对相应的字符,,如果不匹配,模式向右移一格,再进行下一轮的尝试. 这样尝试的最大次数为n-m+1次,模式进行m次比较,这样比较次数一共是m(n-m+1)=O(nm),次,对于随机的自然文本,它的平均效率为O(n+m) 使用输入增强的思想:对模式进行预处理以得到它的一些信息,把这些信息储存在表中,然后在给定文本中实际查找模式时使用这些信息. 以下是这种思维下的两种算法: 一.H

字符串匹配(BF,BM,Sunday,KMP算法解析)

字符串匹配一直是计算机领域热门的研究问题之一,多种算法层出不穷.字符串匹配算法有着很强的实用价值,应用于信息搜索,拼写检查,生物信息学等多个领域. 今天介绍几种比较有名的算法: 1. BF 2. BM 3. Sunday 4. KMP -,BF算法 BF(Brute Force)算法又称为暴力匹配算法,是普通模式匹配算法. 其算法思想很简单,从主串S的第pos个字符开始,和模式串T的第一个字符进行比较,若相等,则主串和模式串都后移一个字符继续比较:若不相同,则回溯到主串S的第pos+1个字符重新

算法题之字符串匹配问题

我最近复习一道困难程度的算法题,发现了许多有趣之处.在借鉴了他人解法后,发现从最简单的情况反推到原题是一种解锁新进阶的感觉.从递归到动态规划,思维上一步一步递进,如同一部跌宕起伏的小说,记录下来和诸君共赏之. 题目如下: 给你一个字符串?s?和一个字符规律?p,请你来实现一个支持 '.'?和?'*'?的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖?整个?字符串?s的,而不是部分字符串. 说明: s?可能为空,且只包含从?a-z?的小写字母

CCF 字符串匹配

问题描述 试题编号: 201409-3 试题名称: 字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符:当选项关闭时,表示同一个字母的大写和小写看作相同的字符. 输入格式 输入的第一行包含一个字符串S,由大小写英文字母组成. 第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小

字符串匹配的KMP算法

html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, "Microsoft YaHei UI", SimSun, SimHei, arial, sans-serif; line-height: 1.6; color: ; background-color: ; margin: 0; padding: 16px 20px; } h1, h2, h

字符串匹配问题

.字符串匹配问题 [问题描述] 字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配.如果括号有互相包含的形式,从内到外必须是<>,(),[],{},例如.输入: [()] 输出:YES,而输入([]), ([])都应该输出NO. [输入格式]strs.in 文件的第一行为一个整数n,表示以下有多少个由括好组成的字符串.接下来的n行,每行都是一个由括号组成的长度不超过255的字符串. [输出格式]strs.out 在输出文件中有N行,每行都是YES或NO. [

蛮力法 字符串匹配

字符串匹配是数据库开发和文字处理软件的关键.幸运的是所有现代编程语言和字符串库函数,帮助我们的日常工作.不过理解他们的原理还是比较重要的. 字符串算法主要可以分为几类.字符串匹配就是其中之一.当我们提到字符串匹配算法,最基本的方法就是所谓的蛮力解法,这意味着我们需要检查每一个文本串中的字符是否和匹配串相匹配.一般来说我们有文本串和一个匹配串(通常匹配串短于文本串).我们需要做的就是回答这个匹配串是否出现在文本串中. 概述 字符串蛮力匹配法的原理非常简单.我们必须检查匹配串的第一个字符与文本串的第

字符串匹配的KMP算法(转)

字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一.它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth. 这种算法不太容易理解,网上有很多解释,但读起来都很费劲.直到读到Jake Boxer的文章,我才真正理解这种算法.下面,我用自己的语言