zoukankan      html  css  js  c++  java
  • 剑指offer字符串1

    面试题5:替换空格

    请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

    class Solution {
    public:
        void replaceSpace(char *str,int length) {
            if(str == nullptr && length <= 0)
                return;
            
            /*originalLength 为字符串str的实际长度*/
            int originalLength = 0;
            int numberOfBlank = 0;
            int i = 0;
            while(str[i] != '')
            {
                ++ originalLength;
    
                if(str[i] == ' ')
                {
                    ++ numberOfBlank;
                }
                ++ i;
            }
            /*newLength 为把空格替换成'%20'之后的长度*/
            int newLength = originalLength + numberOfBlank * 2;
            if(newLength > length)
                return;
            int indexOfOriginal = originalLength;
            int indexOfNew = newLength;
            while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
            {
                if(str[indexOfOriginal] == ' ')
                {
                    str[indexOfNew --] = '0';
                    str[indexOfNew --] = '2';
                    str[indexOfNew --] = '%';
                }
                else
                {
                    str[indexOfNew --] = str[indexOfOriginal];
                }
    
                -- indexOfOriginal;
            }
        }
    };

    面试题20:表示数值的字符串

    请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

    class Solution {
    public:
        
        bool scanUnsignedInteger(const char** str)
        {
            const char* before = *str;
            while(**str != '' && **str >= '0' && **str <= '9')
                ++(*str);
            
            // 当str中存在若干0-9的数字时,其实就是*str增加了,当然它就大于了起始位置,返回true
            return *str > before;
        }
        
        // 整数的格式可以用[+|-]表示,其中B表示无符号数
        bool scanInteger(const char** str)
        {
            if(**str == '+' || **str == '-')
                ++(*str);
            return scanUnsignedInteger(str);
        }
        
        bool isNumeric(const char* str)
        {
            if(str == nullptr)
                return false;
            
            bool numberic = scanInteger(&str);
            
            // 如果出现'.',接下来就是小数部分
            if(*str == '.')
            {
                ++str;
                
                // 下面一行代码用||的原因
                // 1.小数可以没有整数部分,例如.123等于0.123
                // 2.小数点后面可以没有数字,例如233.等于233.0
                // 3.当然还有正常小数 233.666
                numberic = scanUnsignedInteger(&str) || numberic;
            }
            
            // 如果出现'e'或者'E',接下来跟着的是数字的指数部分
            if(*str == 'e' || *str == 'E')
            {
                ++str;
                
                // 下面一行代码用&&的原因
                // 1. 当e或E前面没有数字时,整个字符串不能表示数字,例如.e1、e1
                // 2. 当e或E后面没有整数时,整个字符串不能表示数字,例如12e、12e+5.4
                numberic = numberic && scanInteger(&str);
            }
            return numberic && *str == '';
        }
    
    };

    面试题58:翻转字符串

    输入一个英文句子,翻转句子中单词的顺序,但单词字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student.”,则输出"student a am I"

    # -*- coding:utf-8 -*-
    class Solution:
        def ReverseSentence(self, s):
            # write code here
            s1 = s.split(' ');
            return ' '.join(s1[::-1])

    面试题58(二):左旋转字符串

    汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

    class Solution:
        def LeftRotateString(self, s, n):
            # write code here
            return s[n:] + s[:n]
  • 相关阅读:
    Java第9次作业--接口及接口回调
    Java第8次作业--继承
    软件工程第三次作业——关于软件质量保障初探
    Java第7次作业--访问权限、对象使用
    Java第6次作业--static关键字、对象
    Java第5次作业--对象的创建与使用
    20194629 自动生成四则运算题第一版报告
    软件工程第一次作业
    今天开通博客啦!
    1170. Compare Strings by Frequency of the Smallest Character
  • 原文地址:https://www.cnblogs.com/gezhuangzhuang/p/10692587.html
Copyright © 2011-2022 走看看