1. 问题背景与需求分析
"1012 - 我是第几个单词"这个看似简单的字符串处理问题,实际上蕴含着文本处理领域的基础但关键的技术挑战。在日常开发中,我们经常需要处理类似的需求:给定一个字符串和某个特定位置,快速确定该位置所在的单词序号。
这个问题在以下场景中尤为重要:
- 代码编辑器的语法高亮和错误提示
- 文档处理软件中的字数统计和定位
- 自然语言处理中的分词和词性标注
- 搜索引擎的关键词匹配和突出显示
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法设计思路
2.1 基础解决方案
最直观的解决方法是遍历字符串并计数:
- 初始化单词计数器为0
- 设置一个标志位表示是否处于单词中
- 遍历字符串的每个字符:
- 遇到非空格字符且不在单词中时:
- 增加单词计数器
- 设置单词中标志
- 遇到空格字符时重置单词中标志
- 遇到非空格字符且不在单词中时:
- 在遍历过程中记录每个单词的起始和结束位置
- 当到达目标位置时,返回当前单词计数
python复制def find_word_index(text, position):
word_count = 0
in_word = False
for i, char in enumerate(text):
if char != ' ' and not in_word:
word_count += 1
in_word = True
elif char == ' ':
in_word = False
if i == position:
return word_count
return 0 # 位置超出字符串长度
2.2 边界情况处理
实际应用中需要考虑多种边界情况:
- 字符串开头或结尾的空格
- 连续多个空格
- 目标位置本身就是空格
- 目标位置超出字符串长度
- 空字符串输入
改进后的算法应能正确处理这些情况:
python复制def find_word_index_enhanced(text, position):
if not text or position >= len(text):
return 0
word_count = 0
in_word = False
for i in range(position + 1): # 只需遍历到目标位置
if text[i] != ' ' and not in_word:
word_count += 1
in_word = True
elif text[i] == ' ':
in_word = False
return word_count
3. 性能优化与进阶实现
3.1 预处理与缓存策略
对于需要频繁查询的场景,可以预先处理字符串并建立索引:
python复制class WordIndexFinder:
def __init__(self, text):
self.text = text
self.word_boundaries = []
self._preprocess()
def _preprocess(self):
in_word = False
for i, char i
