StarryNights

每一个你所后悔的现在,都有一个不够努力的曾经

站内检索

循着字句,邂逅星光

搜索文章标题与正文,直达命中的章节

开始一次轻盈的站内探索

从这些主题开始探索

输入关键词

可同时输入多个词语缩小范围

发现内容

在摘要中查看高亮的关键词

快速直达

点击文章或章节标题继续阅读

# 引言

题目链接:https://leetcode.com/problems/longest-common-prefix/description/

# 题目大意

给出一串单词, 编写一个函数找到这串单词的最长公共前缀

**Hint:**If there is no common prefix, return an empty string "".

  • Example
Input: ["flower","flow","flight"]
Output: "fl"

Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.

# 题解

# 一句话题解

遍历所有输入单词, 由于是求解公共最长前缀, 因此假设第一个单词为前缀后续比对只要发现对应位置字符不同即可终止, 检测index缩减到当前比对位置, 最后返回0到前缀所在结束index的子串即可

# 复杂度

时间复杂度 O(nk), k表示前缀的长度

空间复杂度 O(k)

# AC代码

c++版本

class Solution
{
  public:
    string longestCommonPrefix(vector<string> &strs)
    {
        if (strs.size() <= 0)
        {
            return "";
        }
        string ans = strs[0];
        int ansIndex = ans.length();
        for (int i = 1; i < strs.size(); ++i)
        {
            int curLength = strs[i].length();
            for (int j = 0; j < ansIndex && j < curLength; ++j)
            {
                if (strs[i][j] != ans[j])
                {
                    ansIndex = j;
                    continue;
                }
            }
            ansIndex = ansIndex < curLength ? ansIndex : curLength;
        }
        return 0 == ansIndex ? "" : ans.substr(0, ansIndex);
    }
};

go版本

func longestCommonPrefix(strs []string) string {
	lens := len(strs)
	if lens <= 0 {
		return ""
	}
	ans, ansIndex := strs[0], len(strs[0])
	for _, v := range strs {
		curLen := len(v)
		for i := 0; i < ansIndex && i < curLen; i++ {
			if v[i] != ans[i] {
				ansIndex = i
				continue
			}
		}
		if curLen < ansIndex {
			ansIndex = curLen
		}
	}
	return ans[0:ansIndex]
}
更新于 阅读次数 — 次
STARRY NIGHTSPERSONAL NOTES

赞赏

文章至此,故事还在继续。

Seiun

长按或右键保存收款码

文章关联

1 篇关联

顺着引用的连线,读见篇章交错的脉络

展开关系图

拖动平移 · Ctrl / ⌘ + 滚轮缩放 · 点击节点阅读使用 + / − 按钮缩放 · 放大视图后可拖动 · 点击节点阅读单指拖动平移 · 使用 + / − 按钮缩放 · 点击节点阅读

当前文章引用本文
引用列表

引用本文1

  • LeetCode Programming
    AI 摘要

    本文是作者为缓解拖延、练习 Go 语言而开启的 LeetCode 刷题记录,兼作个人题解。文中先介绍 C++ 输入输出加速技巧,通过 ios::sync_with_stdio(false) 解除 C/C++ 流同步、cin.tie(nullptr) 解除 cin 与 cout 绑定来提升效率;随后汇总多道 LeetCode 题解,列出题号、题目、难度及链接,涵盖第1至32题等。

本文引用0

暂无

文章关联