请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
哈希
1 | class Solution |
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
哈希
1 | class Solution |
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
词法、状态机
1 | class Solution { |
请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配
dp[m, n]
指模式p[0,m]
与字符串s[0,n]
匹配dp[m,n]=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧truefalsedp[m−2,n] or dp[m−1,n] ordp[m−1,n−1] and(p[m−1]=s[n] or p[m−1]=′.′)dp[m−1,n−1] and (p[m]=s[n] or p[m]=‘‘.")if m=0 and n=0if m=0 and n=0if m≥1 and p[m]=′∗′otherwise
dp[m, n]
仅仅与dp[m - 2, n], dp[m - 1, n], dp[m - 1, n - 1]
有关
或,倒推,dp[m, n]
指模式p[m:]
与字符串s[n:]
匹配
dp[m,n]=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧truefalsedp[m+2,n] or (p[m]=s[n] or p[m]=′.′) and (dp[m+2,n+1] or dp[m,n+1])dp[m+1,n+1] and (p[m]=s[n] or p[m]=′.′)if m=len(p) and n=len(s)if m=len(p) and n=len(s)if m<len(p) and p[m+1]=′∗′otherwise
1 | // 注:以下程序在GCC及Clang++ 3.x下,用例"a","a."中行为异常,在Clang++更高版本中没有问题 |
给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。
先算A[0]*A[1]*...*A[i-1]
,再乘A[i+1]*...*A[n-1]
1 | class Solution { |
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
数字i交换至第i位
1 | class Solution { |
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
文法、状态机
1 | class Solution { |
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
按位加,相异为1,相同且为1则进位,直至无进位
1 | class Solution { |
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
移位、sizeof数组
1 | class Solution { |
让小朋友们围成一个大圈。然后,随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友。哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)
如果没有小朋友,请返回-1
记初始编号为n0,共N个小朋友,第一个出列小朋友的初始编号为n0=(m−1)%N,从其下一个初始编号为n0=m%N的小朋友开始重新编号为新编号n1=0,则再下一个出列小朋友为新编号n1=(m−1)%(N−1)。
对于任意小朋友,新旧编号的关系为
n1≡f0(n0)≡[n0−(m%N)]%(N−1)
推广之
ni≡fi−1(ni−1)≡{ni−1−[m%(N−i+1)]}%(N−i)
反之
ni−1≡fi−1−1(ni)≡{ni+[m%(N−i+1)]}%(N−i+1)≡(ni+m)%(N−i+1)
显然,最后一个小朋友即为
nN−1=0
即对该小朋友
0=nN−1={nN−2−[m%2]}%(N−i)=fN−1(n0)
而最后一个小朋友初始时的编号
n0=f0−1(n1)=f0−1[f1−1(n2)]=f0−1⋯fN−2−1(nN−1)
代入即
n0=f0−1⋯fN−2−1(0)
1 | class Solution { |
大\小王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。
不重复,且最大最小之差小于5
1 | class Solution { |