华为OJ训练题解析:如何输出字符串的最后一个单词长度

版权申诉
0 下载量 198 浏览量 更新于2024-11-10 收藏 2.09MB ZIP 举报
资源摘要信息:"在华为OJ训练场中,初级题目名为'Last Word'的练习主要涉及字符串处理的知识点。题目要求编程者实现一个功能,即给定一个字符串,程序能够输出这个字符串中最后一个单词的长度。这道题目可以用来检验程序员对字符串分割、遍历以及边界条件处理的基本功。 为了完成这个任务,编程者需要了解以下知识点: 1. 字符串基本操作:包括字符串的创建、访问、修改和查询等。例如,在Python中,字符串可以通过单引号或双引号定义,可以通过索引访问特定字符,还可以使用内置函数进行拼接等操作。 2. 字符串分割:分割是字符串处理中的常见操作,它用于根据指定的分隔符将字符串拆分成多个子字符串。在许多编程语言中,都提供了分割字符串的函数。比如在Python中,可以使用split()函数来根据空格分割字符串。 3. 遍历字符串:遍历是指对字符串中的每一个字符进行访问的过程。编程者需要了解如何使用循环结构(如for循环或while循环)来遍历字符串,并逐个检查字符。 4. 边界条件处理:在处理字符串时,边界条件指的是字符串的开始和结束。编程者需要确保代码能够正确处理字符串开头和结尾的特殊情况,比如输入字符串为空或只有空格等。 5. 字符串末尾单词检测:这需要编程者能够从字符串的末尾开始向前遍历,找到最后一个单词的起始位置,然后计算这个单词的长度。需要注意的是,单词是由空格分隔的字符序列,因此需要通过空格来判断单词的边界。 针对这个特定题目,常见的解题步骤大致包括: - 清除字符串末尾的空格。 - 从字符串的末尾开始向前遍历,寻找最后一个非空格字符的位置,这将确定最后一个单词的起始位置。 - 再次从起始位置向前遍历,直到遇到空格字符或到达字符串的开头,计算这个过程中遍历的字符数量,这将是最后一个单词的长度。 - 输出或返回计算得到的单词长度。 解决这类字符串问题对于编程初学者来说是一个很好的锻炼机会,它不仅能够帮助初学者熟悉字符串的基本操作,还能够锻炼逻辑思维能力和解决问题的能力。对于在华为OJ训练场上的编程者而言,掌握这些知识点对于提高解题效率和正确率是十分关键的。" 根据以上知识点,编程者可以尝试解决"Last Word"这个初级题目。在解决此类问题时,编程者应该注意代码的简洁性和效率,并且尽量避免出现常见的逻辑错误。此外,测试不同的输入情况,包括空字符串、只包含空格的字符串以及包含多个单词的字符串,也是检验程序健壮性的关键步骤。

加强代码:ray_image = gray_guss(temple_recognition) # 图像阈值化操作——获得二值化图 ret, temple_two = cv.threshold(gray_image, 0, 255, cv.THRESH_OTSU) cv_imshow("temple_two",temple_two) #膨胀操作,使字膨胀为一个近似的整体,为分割做准备 kernel = cv.getStructuringElement(cv.MORPH_RECT, (4, 25)) image = cv.dilate(temple_two, kernel) # # 中值滤波(去噪) # image = cv.medianBlur(image, 21) cv_imshow("image",image) ################################################################################# ################################################################################## # 查找轮廓 contours, hierarchy = cv.findContours(image, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) # cv.drawContours(temple_recognition,contours,-1,(0,0,255),3) # cv_imshow("dudu",temple_recognition) words = [] word_images = [] #对所有轮廓逐一操作 for item in contours: word = [] rect = cv.boundingRect(item) x = rect[0] y = rect[1] weight = rect[2] height = rect[3] word.append(x) word.append(y) word.append(weight) word.append(height) words.append(word) # 排序,车牌号有顺序。words是一个嵌套列表 words = sorted(words,key=lambda s:s[0],reverse=False) word_lenth = 0 #word中存放轮廓的起始点和宽高 for word in words: # 筛选字符的轮廓 #if (word[3] > (word[2] * 1.5)) and (word[3] < (word[2] * 3.5) or ((word[3] > (word[2] * 1.5))and(word[1]>201))): if(word[3] > (word[2] * 1.5)): word_lenth = word_lenth+1 splite_image = temple_two[word[1]:word[1] + word[3], word[0]:word[0] + word[2]] word_images.append(splite_image) del word_images[2] print(word_lenth) print(words) for i,j in enumerate(word_images): plt.subplot(1,word_lenth,i+1) plt.imshow(j,cmap='gray') plt.show()

2023-05-11 上传

#第二次作业 #26 #(1) lst=[1,2,3,4,5] square=map(lambda x:x*x,lst) print(list(square)) #(2) even=filter(lambda x:x%2==0,lst) print(list(even)) #27 #(1) file1=open("E:/大一/python与程序设计/file1.txt","r") content1=file1.read() lst1=content1.split() num=list(map(int,lst1)) allnum=sum(num) print(allnum) file1.close() #(2) file1=open("E:/大一/python与程序设计/file1.txt","r") content=[] for i in range(1,4): l=file1.readline() num= list(map(int, l.split())) num.sort() strs=" ".join(list(map(str,num))) strs2=strs+"\n" content.append(strs2) file2=open("E:/大一/python与程序设计/file2.txt","w") file2.writelines(content) file2.close() file1.close() #(3) file1=open("E:/大一/python与程序设计/file1.txt","r") content=file1.readlines() print(len(content)) #28 from datetime import datetime as dt file3=open("E:/大一/python与程序设计/file3.txt",'r',encoding='utf-8') line1=file3.readline() content=[] for i in range(1,4): l=file3.readline().split() content.append(l) col1=[content[0][0],content[1][0],content[2][0]] col2=[content[0][1],content[1][1],content[2][1]] col3=[content[0][2],content[1][2],content[2][2]] col4=[content[0][3],content[1][3],content[2][3]] day_formate="%H:%M:%S" Time=[] Code=[] Price=[] Volume=[] for t in col1: Time.append(dt.strptime(t,day_formate)) for c in col2: Code.append(str(c)) for p in col3: Price.append(float(p)) for v in col4: Volume.append(int(v)) file3.close() #29 #(1) mean=lambda x,y,z:(x+y+z)/3 #(2) def mean(*num): if bool(num)==0: return None else: return sum(num)/len(num) #30 def fibo(n): if n==1 or n==2: return 1 else: return fibo(n-1)+fibo(n-2) #31 from math import sqrt class Point(): def __init__(self,x,y): self.x=x self.y=y class Line(Point): def __init__(self,p1,p2): self.p1=p1 self.p2=p2 def lenth(self): lenth=sqrt((self.p1.x-self.p2.x)**2+(self.p1.y-self.p2.y)**2) return lenth def slope(self): if self.p1.x==self.p2.x: return None else: k=(self.p1.y-self.p2.y)/(self.p1.x-self.p2.x) return k def __repr__(self): return ((self.p1),(self.p2)) p1=Point(2,3) p2=Point(5,9) line=Line(p1,p2) l_line=line.lenth() k_line=line.slope() print(f"起点(2,3)到止点(5,9)的线段长度为{l_line},斜率为{k_line}") #32 class Point(): #(1) def __init__(self,x=0,y=0): self.x=x self.y=y #(2) def trans(self): return (self.y,self.x) #(3) def show(self): return print(f"该点坐标为({self.x},{self.y})") #(4) p1=Point(1,2) p1.trans() p1.show() p2=Point(3,5) p2.trans() p2.show()

2023-06-10 上传