news 2026/5/23 6:38:20

核心代码编程-小学英语老师批改作文-100分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
核心代码编程-小学英语老师批改作文-100分

题目描述:你是一名小学英语老师,正在批改学生的英语作文。由于学生在书写单词时常常会出现些小问题,比如多余的空格,作文批改过程中需要纠正问题
包括前后多余空格去除,中间重复的空格应该删除多余空格,单词间最多只保留一个空格。

输入:一个仅包含ASCII字符的本文字符串 story。
输出:请你找出批改后的作文中,最长的不包含重复字符的子串长度。
为了简化查找过程,重复字符比较忽略字符大小写,"am"等于"Am"、"AM"和"aM"。
约束
0 <= story.length <= 1000
story 仅包含 ASCII字符(0-127)

补充说明:
示例1
输入:"Hello World!"
输出:7
说明:最长子串为"World!",长度7
示例2
输入:" hi, jIn"
输出:5说明:先对空格和大小写做处理,输入串等价为"Hi,Jin",最长子串是",Jin",长度为5

以下是针对题目要求的完美实现。题目要求是:作为小学英语老师批改作文,输入一个字符串story,需要先预处理字符串(去除前后多余空格,删除中间重复的空格,单词间最多保留一个空格),然后将所有字符转为小写(忽略大小写),最后找到批改后字符串中最长的不包含重复字符的子串长度。以下代码分别用 C、C++、JavaScript、Java、Go 和 Python 实现,每个实现都是一个独立的函数,接受字符串story并返回整数结果。代码不包含输入输出处理,仅实现核心逻辑。

C 实现

#include <string.h> #include <ctype.h> int function(const char* story) { if (story == NULL || *story == '\0') return 0; int len = strlen(story); // 去除前导空格 int start = 0; while (start < len && isspace(story[start])) start++; // 去除尾随空格 int end = len - 1; while (end >= start && isspace(story[end])) end--; if (start > end) return 0; // 全空格 // 删除中间多余空格 char temp[1001]; // 最大长度约束为1000 int j = 0; int prev_space = 0; // 标记上一个字符是否为空格 for (int i = start; i <= end; i++) { if (isspace(story[i])) { if (!prev_space) { temp[j++] = ' '; prev_space = 1; } } else { temp[j++] = story[i]; prev_space = 0; } } temp[j] = '\0'; // 字符串结束 // 转为小写 for (int i = 0; i < j; i++) { temp[i] = tolower(temp[i]); } // 滑动窗口找最长不重复子串 int last_index[128]; // ASCII 0-127 for (int i = 0; i < 128; i++) last_index[i] = -1; int left = 0; int max_len = 0; for (int right = 0; right < j; right++) { char c = temp[right]; int idx = (int)c; if (last_index[idx] != -1 && last_index[idx] >= left) { left = last_index[idx] + 1; } last_index[idx] = right; int current_len = right - left + 1; if (current_len > max_len) max_len = current_len; } return max_len; }

C++ 实现

#include <string> #include <unordered_map> #include <cctype> #include <algorithm> int function(std::string story) { if (story.empty()) return 0; // 去除前导和尾随空格 size_t start = 0; while (start < story.size() && std::isspace(story[start])) start++; size_t end = story.size(); while (end > start && std::isspace(story[end-1])) end--; if (start >= end) return 0; std::string s = story.substr(start, end - start); // 删除中间多余空格 std::string result; bool prev_space = false; for (char c : s) { if (std::isspace(c)) { if (!prev_space) { result += ' '; prev_space = true; } } else { result += c; prev_space = false; } } s = result; // 转为小写 for (char &c : s) c = std::tolower(c); // 滑动窗口找最长不重复子串 std::unordered_map<char, int> char_index; int left = 0; int max_len = 0; for (int right = 0; right < s.size(); right++) { char c = s[right]; if (char_index.find(c) != char_index.end() && char_index[c] >= left) { left = char_index[c] + 1; } char_index[c] = right; max_len = std::max(max_len, right - left + 1); } return max_len; }

JavaScript 实现

function function(story) { if (!story) return 0; // 预处理字符串 let s = story.trim(); s = s.replace(/\s+/g, ' '); // 替换连续空格为单个空格 s = s.toLowerCase(); // 滑动窗口找最长不重复子串 let charIndex = new Map(); let left = 0; let maxLen = 0; for (let right = 0; right < s.length; right++) { let char = s[right]; if (charIndex.has(char) && charIndex.get(char) >= left) { left = charIndex.get(char) + 1; } charIndex.set(char, right); maxLen = Math.max(maxLen, right - left + 1); } return maxLen; }

Java 实现

import java.util.HashMap; import java.util.Map; public int function(String story) { if (story == null || story.isEmpty()) return 0; // 预处理字符串 String s = story.trim(); s = s.replaceAll("\\s+", " "); // 替换连续空格为单个空格 s = s.toLowerCase(); // 滑动窗口找最长不重复子串 Map<Character, Integer> charIndex = new HashMap<>(); int left = 0; int maxLen = 0; for (int right = 0; right < s.length(); right++) { char c = s.charAt(right); if (charIndex.containsKey(c) && charIndex.get(c) >= left) { left = charIndex.get(c) + 1; } charIndex.put(c, right); maxLen = Math.max(maxLen, right - left + 1); } return maxLen; }

Go 实现

package main import ( "strings" "unicode" ) func function(story string) int { if len(story) == 0 { return 0 } // 预处理字符串 s := strings.TrimSpace(story) words := strings.Fields(s) // 分割单词,去除多余空格 s = strings.Join(words, " ") // 用单个空格连接 s = strings.ToLower(s) // 滑动窗口找最长不重复子串 charIndex := make(map[rune]int) left := 0 maxLen := 0 for right, char := range s { if idx, ok := charIndex[char]; ok && idx >= left { left = idx + 1 } charIndex[char] = right if right-left+1 > maxLen { maxLen = right - left + 1 } } return maxLen }

Python 实现

def function(story): if not story: return 0 # 预处理字符串 s = ' '.join(story.split()) # 去除多余空格,单词间保留一个空格 s = s.lower() # 滑动窗口找最长不重复子串 char_index = {} left = max_len = 0 for right, char in enumerate(s): if char in char_index and char_index[char] >= left: left = char_index[char] + 1 char_index[char] = right max_len = max(max_len, right - left + 1) return max_len

以上实现均满足题目要求:预处理字符串(去除多余空格并转为小写),然后使用滑动窗口算法计算最长不重复字符子串长度。代码考虑了边界条件(如空输入),并遵循了各语言的编码规范。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 6:38:04

缙云定制书柜:从“尺寸错位”到“毫米级契合”的深度技术拆解

一、痛点深度剖析&#xff1a;定制书柜为何总差那“几毫米”&#xff1f;在缙云定制书柜的实践中&#xff0c;我们团队发现一个高频且棘手的难题&#xff1a;业主花费数月挑选板材、设计风格&#xff0c;最终安装时却总遭遇“尺寸错位”——书柜与墙体之间留出尴尬缝隙&#xf…

作者头像 李华
网站建设 2026/5/23 6:37:05

客户端设计(下):场景流派与实战设计方式

客户端架构&#xff1a;为什么、什么时候、怎么做https://blog.csdn.net/mix39/article/details/161257993客户端设计&#xff08;上&#xff09;&#xff1a;MVC/MVP/MVVM 与高内聚低耦合https://blog.csdn.net/mix39/article/details/161257807客户端设计&#xff08;中&…

作者头像 李华
网站建设 2026/5/23 6:26:10

COLMAP实战:如何用命令行搞定无人机航拍图像的三维重建?

COLMAP实战&#xff1a;如何用命令行搞定无人机航拍图像的三维重建&#xff1f; 无人机航拍技术正在彻底改变测绘、考古、农业和工程巡检等领域的工作方式。想象一下&#xff0c;你刚刚完成了一次大规模的无人机航拍任务&#xff0c;带回了数百甚至数千张高分辨率图像。这些图像…

作者头像 李华
网站建设 2026/5/23 6:25:00

嵌入式开发中板级支持包(BSP)的端口重映射技术

1. 理解板级支持驱动与外围端口的关系在嵌入式开发中&#xff0c;板级支持包(BSP)是连接硬件与应用程序的关键桥梁。以Keil MDK环境为例&#xff0c;当我们通过Pack Installer安装特定开发板的示例项目时&#xff0c;项目中通常包含针对该板载外设的专用驱动代码。这些驱动往往…

作者头像 李华
网站建设 2026/5/23 6:23:53

STM32H743的SDRAM(W9825G6KH)性能调优与稳定性测试指南

STM32H743的SDRAM&#xff08;W9825G6KH&#xff09;性能调优与稳定性测试指南 在嵌入式系统开发中&#xff0c;SDRAM作为大容量、高速存储解决方案&#xff0c;广泛应用于图像处理、高速数据缓存等场景。STM32H743系列微控制器凭借其强大的FMC&#xff08;Flexible Memory Con…

作者头像 李华
网站建设 2026/5/23 6:22:26

数据科学家真正用的模型评估逻辑:从指标到业务决策

1. 这不是“背公式清单”&#xff0c;而是数据科学家每天真正在用的评估逻辑你打开一份模型报告&#xff0c;看到 Accuracy&#xff1a;92.3%&#xff0c;Precision&#xff1a;87.1%&#xff0c;AUC&#xff1a;0.94——然后呢&#xff1f;你是不是也经历过&#xff1a;老板问…

作者头像 李华