赞
踩
1 . 字符流中第一个不重复的字符
题目描述:
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
如果当前字符流没有存在出现一次的字符,返回#字符。
示例:
输入:‘google’
输出:‘ggg#ll'
解题思路:
最开始没读懂题意,以为直接读入一整个字符串’google‘,然后判断输出其中第一个不重复的字符 ’ l ' 。
但是输出的结果并不是一个字符,而是这样的‘ggg#ll' ,他的意思是g是第一次出现就一直输出g 直到第二个g出现的时候判断到它是重复所以输出#。然后开始输出 l 。
我们要判断一个字符出现的次数,要有一个 key 和 这个key出现的次数 正好满足python中字典的存储结构
例如 dict={ 'g' :2 , 'o':2 , 'l' : 1 }
key 表示的是字符流中的字符char, key 的值 即dict[key]为char出现的次数。
我们将每一个字符出现的次数计数,怎么计数呢,通过新建字典dict = { },字典dict[char]的值来计数,我们遍历字典 if 判断字符char是否出现过, 如果出现过,也就是char 在dict 中,则 dict[char]+1, 如果没有出现过,证明他是第一次出现 令dict[char] = 1,然后我们通过新建一个空字符串 s= ' ',读入字符流中每一个字符到字符串中 即 s = ‘ google ' 。遍历整个字符 判断dict[ s[i] ]是否为 1.在字典中第一个dict[ s[i] ]的值为 1 的 s[i] 这个字符就是第一次出现的没重复的字符,return即可,如果遍历结束也没有dict[ s[i] ]的值为 1 ,return ’#‘ 即可。
python代码实现如下:
- # -*- coding:utf-8 -*-
- class Solution:
- def __init__(self):
- self.s=''
- self.dict={} #创建字典,key为读取的字符串中的每一个字符,val为每个字符出现的个数的计数值
- # 返回对应char
- def FirstAppearingOnce(self):
- # write code here
- for i in self.s: #遍历字符串s中的字符
- if self.dict[i]==1: #如果某个字符对应的计数为1,则返回该字符
- return i
- return '#' #在所有字符遍历完后,进行判断
- def Insert(self, char):
- # write code here
- self.s=self.s+char #从字符流中读入字符到字符串s中
- if char in self.dict:
- self.dict[char]=self.dict[char]+1 #如果读入的字符在字符串中已存在,在字典中对应的字符计数加一
- else:
- self.dict[char]=1 #如果读入的字符在字符串中不存在,则字典中对应的字符计数为一(即新增了一个新的字符)
-
-
- ###测试##test##
-
- if __name__=="__main__":
- s=Solution()
- for i in 'google':#循环读入字符流
- s.Insert(i)
- print(s.FirstAppearingOnce(),end='')#打印返回值
2 . 表示数值的字符串
题目描述:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
解题思路:
看到题目第一想法就是分成几类,然后if判断,符合这几类就返回True,否则返回False,怎么分类,怎么判断,也就是常说的正则表达式可以干的事。关于正则表达式怎么用参考教程:python正则表达式。
python代码实现如下:
- # -*- coding:utf-8 -*-
- import re
- class Solution:
- # s字符串
- def isNumeric(self, s):
- # write code here
- #正则表达式
- pattern = "^[-+]?\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?$"
- # pattern="^[\+\-]?[0-9]*(\.[0-9]*)?([eE][\+\-]?[0-9]+)?$"
- if re.match( pattern, s, re.M|re.I):
- return True
- return False
-
- ##测试
- if __name__=="__main__":
- s=Solution()
- print(s.isNumeric('+123'))
网上看到几个抖机灵的人才,想到的解这个题的办法,就是用float()函数,能够被转成浮点型的就是数值,否则就不是。
python代码实现如下:
- # -*- coding:utf-8 -*-
- class Solution:
- # s字符串
- def isNumeric(self, s):
- # write code here
- #正则表达式
- try:
- c=(float(s))
- print(s,'是数值')
- return True
- except ValueError as e:
- print(s,"不是数值")
- return False
3 . 正则表达式匹配
题目描述:
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
解题思路:
题目要实现正则表达式,那就直接采用 import re 在python中内置的库,非常轻松加愉快
python代码实现如下:
- # class Solution:
- # # s, pattern都是字符串
- # def match(self, s, pattern):
- # import re
- # pattern='^'+s+'$'
- # if re.match(pattern, s , re.M|re.I):
- # return True
- # return False
- # if __name__=="__main__":
- # s=Solution()
- # print(s.match_test('.a','aaa'))
4 . 替换空格
题目描述:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路:
从头遍历这个字符串,发现有空格 将空格替换成%20 然后输出新生成的字符串。
python代码实现如下:
- # -*- coding:utf-8 -*-
- class Solution:
- # s 源字符串
- def replaceSpace(self, s):
- # write code here
- a='%20'
- str=''
- for i in s:
- if i==' ':
- i=a
- str=str+i
- return str
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。