char

LeetCode(125)验证回文段

帅比萌擦擦* 提交于 2020-02-13 00:51:38
(125)验证回文段 Description: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 **说明:**本题中,我们将空字符串定义为有效的回文串。 示例1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例2: 输入: "race a car" 输出: false 思路: 其实整体思路也是首先将str过滤为只含有数字和字母,再将其全部大写/小写。最后检验其是否为回文段。 对于字符串过滤,目前想到三种方法: 使用 filter 来过滤无效字符, 但没搞清楚如何既保留字母也保留数字 只需要使用 str.isalnum 。(需要注意的是, filter 所返回的是一个generator,即惰性迭代对象,需要使用*list()*来将其转化为list,再使用str.join()来append再string的后面) 最无脑的方法,遍历string,将符合要求的append在某空string上。 使用re.findall()来过滤。需要复习 正则表达式 如果使用C的话,使用stack 使用双指针夹逼 代码: 使用*re.findall()*来进行过滤操作: #44ms class Solution : def isPalindrome ( self , s : str ) - > bool : import

Posix信号量

血红的双手。 提交于 2020-02-13 00:02:42
1、概述   信号量(semaphore)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语。信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。Posix信号量分为有名信号量和无名信号量(也叫基于内存的信号量)。 2、Posix有名信号量   有名信号量既可以用于线程间的同步也可以用于进程间的同步。 1)由sem_open来创建一个新的信号量或打开一个已存在的信号量。其格式为: sem_t *sem_open(const char *name,int oflag,mode_t mode,unsigned int value); 返回:若成功则为指向信号量的指针,若出错则为SEM_FAILED 其中,第三、四个参数可以没有,主要看第二个参数如何选取。 oflag参数:可以是0、O_CREAT或O_CREAT|O_EXCL。如果指定O_CREAT标志而没有指定O_EXCL,那么只有当所需的信号量尚未存在时才初始化它。但是如果所需的信号量已经存在也不会出错。 但是如果在所需的信号量存在的情况下指定O_CREAT|O_EXCL却会报错。 mode参数:指定权限位。 value参数:指定信号量的初始值

字典树(Trie)

时光怂恿深爱的人放手 提交于 2020-02-12 22:56:28
一、基本概念:   字典树(Trie)是一种用于实现字符串快速检索的多叉树结构。字典树的每一个结点都拥有若干个字符指针,若在插入或检索字符串时扫描到一个字符 c,就沿着当前结点的 c 字符指针,走向该指针指向的结点。 1、初始化   一棵空字典树仅包含一个根节点,该点的字符指针均指向空。 2、插入操作   当需要插入一个字符串 str 时,我们另一个指针 p 指向根节点。人后,依次扫描 s 中的每一个字符 c :   (1)若 p 的 c 字符指针指向一个已经存在的结点 q,则令 p = q   若 p 的 c 字符指针指向空,则新建一个结点 q,令 p = q   当 s 中的字符扫描完毕时,在当前结点 p 上标记它是一个字符串的尾部 int trie [ maxn ] [ 26 ] , tot = 1 ; bool nd [ maxn ] ; void _insert ( char str [ ] ) { int p = 1 ; for ( int k = 0 ; str [ k ] ; k ++ ) { int ch = str [ k ] - 'a' ; if ( trie [ p ] [ ch ] == 0 ) trie [ p ] [ ch ] = ++ tot ; p = trie [ p ] [ ch ] ; } nd [ p ] = true ; } 2、检索操作

字符串排序算法

久未见 提交于 2020-02-12 22:18:52
字母表数据结构 package string; import edu.princeton.cs.algs4.StdOut; public class Alphabet { public static final Alphabet BINARY = new Alphabet("01"); public static final Alphabet OCTAL = new Alphabet("01234567"); public static final Alphabet DECIMAL = new Alphabet("0123456789"); public static final Alphabet HEXADECIMAL = new Alphabet("0123456789ABCDEF"); public static final Alphabet DNA = new Alphabet("ACGT"); public static final Alphabet LOWERCASE = new Alphabet("abcdefghijklmnopqrstuvwxyz"); public static final Alphabet UPPERCASE = new Alphabet("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); public static final

啥?你想diy一个智能音箱,来吧

痴心易碎 提交于 2020-02-12 16:18:14
没错,这是智zhang语音助手 本系统基于自美系统二次开发,添加连接EMQ服务器,语音远程控制LED(Nodemcu),当然也可以扩展控制更多的设备,只需要将下位机设备连接到EMQ服务器即可。 由于使用自美系统,需要配套的驱动板 官方文档 有相关链接。(有兴趣的同学可以了解一下 悟空项目 ,也是一个开源智能音箱项目) 自美系统已经将基础的语音交互框架做好,支持自定义唤醒词( snowboy平台 ),不过有一点需要了解,如果想使用自美系统,需要购买其专用驱动板,用来驱动扬声器和麦克风。如下图 这不是广告哈 对了,有一点需要主要,对于这类智能语音交互系统,麦克风的质量真的很重要,不然都唤醒不了,那就尴尬了。 开机界面如下(界面还是很简洁的) 这里主要介绍一下,二次开发插件的过程,使用Python语言,代码很简单。 自美文档详细介绍了如何添加插件(这里直接上代码) # encoding: utf-8 import paho.mqtt.client as mqtt from plugin import Plugin HOST = "47.98.xxx.58" #EMQ服务器地址 PORT = 1883 #端口固定1883 MQTT_ID="Client_Test" #自定义客户端 class Test(Plugin): def start(self,name): client = mqtt

c#自学之路第十二天

邮差的信 提交于 2020-02-12 13:29:04
c#自学之路第十二天 一、笔记 1.继承(如:继承) 特性: 1.单跟性:一个字类只能有一个父类 2.传递性: 我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员单独的封装到一个类中,作为这些类的父类。 字类继承父类的方法和属性,没有继承父类的私有字符段,也没有继承父类的构造函数,但是字类会默认调用父类无参的构造函数,用来创建父类对象,让子类可以使用父类中的成员。 所以,如果在父类中重新写了一个有参的构造函数之后,无参的构造函数会被干掉,字类就调用不到了,所以字类会报错。 解决办法: 1)在父类中重新写一个无参的构造函数 2)在字类中显示的调用父类的构造函数,使用关键字:base()(常用) 2.查看类图 对应的项目——>视图 3.object是所有类的基类 4.new关键字 1)创建对象 2)隐藏从父类那里继承过来的同名成员 隐藏的后果是调用不到父类的成员 二、代码 namespace 继承 { class Program { static void Main ( string [ ] args ) { Student s = new Student ( "学生" , 18 , '男' , 101 ) ; } } public class Person { private string _name ; public string Name { get {

读取邮件

為{幸葍}努か 提交于 2020-02-12 12:22:35
要去邮箱开启授权码 然后就可以读取登陆 下图是已经截取过的邮件内容(前面还有许多邮件头什么的)了,在第一个Content-Transfer-Encoding: base64后面就是加密过的内容, 我搞了很久,每次移动指针到内容,程序就崩溃了,不知道是不是哪里不对,只好把东西复制下来解密 要是有大神解决了,麻烦评论一下。 #include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #include <stdlib.h> #include "base64.h" #define RESPONSE_BUFFER_SIZE 3000 SOCKET sock; int main() { char login[128]; char pass[128]; sock=ConnectToServer(); printf("请输入邮箱账号:"); scanf("%s",login); printf("请输入邮箱授权码:"); scanf("%s",pass); Login(login,pass,sock); return 0; } int ConnectToServer() { struct hostent FAR *pHostent; struct sockaddr_in serAddr = { 0 }; char buf[1500]

5前缀判断

二次信任 提交于 2020-02-12 12:15:04
题目标题:前缀判断 如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL。 比如:"abcd1234" 就包含了 "abc" 为前缀 char* prefix(char* haystack_start, char* needle_start) { char* haystack = haystack_start; char* needle = needle_start; while(*haystack && *needle){ if(______________________________) return NULL; //填空位置 } if(*needle) return NULL; return haystack_start; } 请分析代码逻辑,并推测划线处的代码,通过网页提交。 注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!! 代码 # include <stdio.h> char * prefix ( char * haystack_start , char * needle_start ) { char * haystack = haystack_start ; char * needle = needle_start ; while ( * haystack && *

发送邮件

ぃ、小莉子 提交于 2020-02-12 12:03:29
效果图 main.cpp 1 #include <iostream> 2 #include "SendMail.h" 3 #include <string> 4 using namespace std; 5 6 int main() 7 { 8 char EmailContents[255]="From: \"名字\"<xxxxxxx@163.com>\r\nTo:"; 9 char EmailTo[50]; 10 char subject[50]; 11 char content[50]; 12 printf("要发送的邮箱账号:"); 13 scanf("%s",EmailTo); 14 printf("你的标题:"); 15 scanf("%s",subject); 16 printf("你的内容:"); 17 scanf("%s",content); 18 19 strcat(EmailContents,EmailTo); 20 strcat(EmailContents,"\n"); 21 strcat(EmailContents, "subject:"); 22 strcat(EmailContents, subject); 23 strcat(EmailContents, "\r\n\r\n"); 24 strcat(EmailContents, content);

直播

浪尽此生 提交于 2020-02-12 12:02:55
// // Created by jihuayu on 2020/2/12. // #include<stdio.h> #include<malloc.h> #include<string.h> const char *base_num[11] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"}; #define NUM_LENGTH (11) typedef struct Var { char *name; int num; } Var; typedef struct Line { char *str; int pos; } Line; typedef struct VM { Var **vars; } VM; //从位置pos开始比较base是不是和str一样 int cmp(const char *base, const char *str, int pos) { for (int i = 0; i < strlen(str); ++i) { if (base[pos + i] != str[i] || (i + pos >= strlen(base))) { return 0; } } return 1; } int cn_to_num1(Line *line) { for (int i = 0; i <