1 . 字元流中第乙個不重複的字元
題目描述:
請實現乙個函式用來找出字元流中第乙個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第乙個只出現一次的字元是"g"。當從該字元流中讀出前六個字元「google"時,第乙個只出現一次的字元是"l"。
如果當前字元流沒有存在出現一次的字元,返回#字元。
示例:輸入:『google』
輸出:『ggg#ll'
解題思路:
最開始沒讀懂題意,以為直接讀入一整個字串』google『,然後判斷輸出其中第乙個不重複的字元 』 l ' 。
但是輸出的結果並不是乙個字元,而是這樣的『ggg#ll' ,他的意思是g是第一次出現就一直輸出g 直到第二個g出現的時候判斷到它是重複所以輸出#。然後開始輸出 l 。
我們要判斷乙個字元出現的次數,要有乙個 key 和 這個key出現的次數 正好滿足python中字典的儲存結構
例如 dict=
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
# 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)
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 -*-網上看到幾個抖機靈的人才,想到的解這個題的辦法,就是用float()函式,能夠被轉成浮點型的就是數值,否則就不是。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'))
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 然後輸出新生成的字串。
python**實現如下:
# -*- coding:utf-8 -*-
class solution:
# s 源字串
def replacespace(self, s):
# write code here
a='%20'
str=''
for i in s:
if i==' ':
i=astr=str+i
return str
劍指offer 字串
問題描述 class solution auto res temp.c str strcpy str,res strcpy 關於c 中string和char 的區別參考 問題描述 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0...
劍指offer 字串
問題描述 function replacespace str 問題描述 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含 0 次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a...
劍指offer 字串
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解這題需要把題意仔細研究清...