我有一个问题,我必须在不使用任何字符串方法的情况下找到字符串最后一个单词的长度.如果允许使用字符串方法,我就可以根据空间进行拆分,并可以使用最后一个单词.

到目前为止,我的try 如下:

string = "Hello how are you"

lst = list(string)
print(lst)

last_word = ""
for i in reversed(lst):
    if i == ' ':
        break
    elif i != ' ':
        last_word += i

    
print(last_word)    
print(len(last_word))

在最后一句话之后没有空格之前,这个方法很有效.

string = "Hello how are you "string = "Hello how are you "时失败

推荐答案

假设你不在乎标点符号,那么从字符串的后面迭代到:

  1. 查找第一个非空白字符:
  2. 查找上述字符之前的第一个空白字符:

101 Calling 100 on a string is O(1).

# Source: https://github.com/python/cpython/blob/738c19f4c5475da186de03e966bd6648e5ced4c4/Objects/unicodetype_db.h#L6151
UNICODE_WHITESPACE_CHARS = {0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x001C,
                            0x001D, 0x001E, 0x001F, 0x0020, 0x0085, 0x00A0,
                            0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004,
                            0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A,
                            0x2028, 0x2029, 0x202F, 0x205F, 0x3000}


def get_last_non_whitespace_index(sentence: str) -> int:
    sentence_length = len(sentence)
    i = sentence_length - 1
    while i >= 0:
        if ord(sentence[i]) not in UNICODE_WHITESPACE_CHARS:
            return i
        i -= 1
    return -1


def get_last_word_len(sentence: str) -> int:
    last_non_whitespace_index = get_last_non_whitespace_index(sentence)
    if last_non_whitespace_index == -1:
        return 0
    i = last_non_whitespace_index
    while i >= 0:
        if ord(sentence[i]) in UNICODE_WHITESPACE_CHARS:
            break
        i -= 1
    return last_non_whitespace_index - i


def main() -> None:
    print(f'{get_last_word_len("Hello how are you") = }')
    print(f'{get_last_word_len("Hello how are you ") = }')
    print(f'{get_last_word_len("Hello how are you  ") = }')
    print(f'{get_last_word_len("") = }')
    print(f'{get_last_word_len("a   ") = }')  # Whitespace is a tab character.


if __name__ == '__main__':
    main()

Output:

get_last_word_len("Hello how are you") = 3
get_last_word_len("Hello how are you ") = 3
get_last_word_len("Hello how are you  ") = 3
get_last_word_len("") = 0
get_last_word_len("a    ") = 1

Python-3.x相关问答推荐

根据收件箱内部的值以行降序的特定顺序重新排序列

类型注释:pathlib. Path vs importlib. resources. abc. Traversable

为什么我无法在django中按月筛选事件?

查找值始终为零的行 pandas

attrs 将 list[str] 转换为 list[float]

SMTP 库 Python3:不太安全的应用程序访问

Dask worker post-processing

从 Python2 到 Python3 的这种解包行为的变化是什么?

Python - 如何从同一台客户端机器运行多个Flask应用程序

你如何表达一个没有参数的 Python Callable?

virtualenv virtualenvwrapper virtualenv:错误:无法识别的参数:--no-site-packages

使用打印时,用+连接是否比用,分隔更有效?

Python3 的超级和理解-> TypeError?

如何遍历某些扩展名的文件?

如何区分文件之类的对象和文件路径之类的对象

SQLAlchemy:如果不存在则创建模式

python中的订单字典索引

同步调用协程

首次使用后 zip 变量为空

在 PostgreSQL 上使用 SQLAlchemy 创建全文搜索索引