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

版权申诉
0 下载量 108 浏览量 更新于2024-11-10 收藏 2.09MB ZIP 举报
题目要求编程者实现一个功能,即给定一个字符串,程序能够输出这个字符串中最后一个单词的长度。这道题目可以用来检验程序员对字符串分割、遍历以及边界条件处理的基本功。 为了完成这个任务,编程者需要了解以下知识点: 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()

223 浏览量