力扣题目学习笔记(OC + Swift) 14. 最长公共前缀

news2025/1/16 21:12:39

14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

方法一 竖向扫描法

个人感觉纵向扫描方式比较直观,符合人类理解方式,从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀。
竖向扫描原理

Swift

func longestCommonPrefix(_ strs: [String]) -> String {
        guard let firstStr = strs.first, !firstStr.isEmpty else { return "" }
        
        for i in 0..<firstStr.count {
            for j in 1..<strs.count {
                if strs[j].count == i || strs[j][strs[j].index(strs[j].startIndex, offsetBy: i)] != firstStr[firstStr.index(firstStr.startIndex, offsetBy: i)] {
                    return String(firstStr.prefix(i))
                }
            }
        }
        
        return firstStr
    }

OC

-(NSString *)longestCommonPrefix:(NSArray <NSString *>*)strs {
    if (strs.count <= 0) {
        return @"";
    }
    
    NSString *firstStr = strs.firstObject;
    NSInteger len = firstStr.length;
    for (NSInteger i=0; i<len; i++) {
        for (NSInteger j=1; j<strs.count; j++) {
            if (strs[j].length == i || [strs[j] characterAtIndex:i] != [firstStr characterAtIndex:i]) {
                return [firstStr substringToIndex:i];
            }
        }
    }
    
    return firstStr;
}

方法二 有序首尾比较法

有序首尾比较法,先对数组进行排序,巧妙利用排序后的顺序及值之间的关系,只比较首尾两个字符串即可。

Swift

func longestCommonPrefix(_ strs: [String]) -> String {
        let strs = strs.sorted()
        
        let start = strs.first!
        let end = strs.last!
        
        var res = ""
        for i in 0..<start.count {
            let s = start[start.index(start.startIndex, offsetBy: i)]
            if s == end[end.index(end.startIndex, offsetBy: i)]{
                res.append(s)
            }else {
                break
            }
        }
        return res
    }

OC

//有序首尾比较法
-(NSString *)longestCommonPrefix:(NSArray *)strs {
    NSArray *sortedStrs = [strs sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, id  _Nonnull obj2) {
        return [obj1 compare:obj2 options:NSCaseInsensitiveSearch];
    }];
    
    NSString *res = @"";
    NSString *firstStr = sortedStrs.firstObject;
    NSString *lastStr = sortedStrs.lastObject;
    for (NSInteger i=0; i<firstStr.length; i++) {
        if ([firstStr characterAtIndex:i] == [lastStr characterAtIndex:i]) {
            unichar c = [firstStr characterAtIndex:i];
            res = [res stringByAppendingString:[NSString stringWithCharacters:&c length:1]];
        }else {
            break;
        }
    }
    
    return res;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1324306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过https协议访问Tomcat部署并使用Shiro认证的应用跳转登到录页时协议变为http的问题

问题描述&#xff1a; 在最近的一个项目中&#xff0c;有一个存在较久&#xff0c;并且只在内部城域网可访问的一个使用Shiro框架进行安全管理的Java应用&#xff0c;该应用部署在Tomcat服务器上。起初&#xff0c;应用程序可以通过HTTP协议访问&#xff0c;一切运行都没…

海外代理IP如何选择?如何避开误区?

近年来&#xff0c;我国互联网商业保持持续发展的状态大环境的优化&#xff0c;大大小小的企业都想乘胜追击&#xff0c;大展宏图&#xff0c;积极推动各项数据业务的进程。 而对于跨境业务来说&#xff0c;代理IP是不可或缺的重要工具之一&#xff0c;市面上代理IP类型众多&a…

基于k6和python进行自动化性能测试

摘要&#xff1a;在性能测试中&#xff0c;达到相应的性能指标对于一个软件来说十分重要&#xff0c;在本文中&#xff0c;将介绍一种现代化性能测试工具k6。 import http from k6/http; import { sleep } from k6; export default function () {http.get(https://test-api.co…

Java对接腾讯多人音视频房间示例

最近在对接腾讯的多人音视频房间&#xff0c;做一个类似于腾讯会议的工具&#xff0c;至于为什么不直接用腾讯会议&#xff0c;这个我也不知道&#xff0c;当然我也不敢问 首先是腾讯官方的文档地址&#xff1a;https://cloud.tencent.com/document/product/1690 我是后端所以…

大一C语言查缺补漏1 12.2

学习方向非C语言方向&#xff0c;但是专业是。。 仅供参考&#xff0c;&#xff0c;祝大家期末考试顺利。 对于二维数组定义&#xff0c;要给出明确的定义 eg&#xff1a;double a [21][4] int a [ ][3] {1,2,3,4,5,6} 不可以是&#xff1a;int a [ ][3]&#xff1b; 在c…

SpringBlade export-user SQL 注入漏洞复现

0x01 产品简介 SpringBlade 是一个由商业级项目升级优化而来的 SpringCloud 分布式微服务架构、SpringBoot 单体式微服务架构并存的综合型项目。 0x02 漏洞概述 SpringBlade v3.2.0 及之前版本框架后台 export-user 路径存在安全漏洞,攻击者利用该漏洞可通过组件customSqlS…

Flutter实现丝滑的滑动删除、移动排序等-Dismissible控件详解

文章目录 Dismissible 简介使用场景常用属性基本用法举例注意事项 Dismissible 简介 Dismissible 是 Flutter 中用于实现可滑动删除或拖拽操作的一个有用的小部件。主要用于在用户对列表项或任何其他可滑动的元素执行删除或拖动操作时&#xff0c;提供一种简便的实现方式。 使…

sed 命令详解

1. 强大的编辑工具 sed是一个“作交互式的”面向字符流的编辑器。输入一般来自文件&#xff0c;但是也可以直接来自键盘。输出在默认情况下输出到终端屏幕上&#xff0c;但是也可以输出到文件中&#xff0c;sed通过解释脚本来工作&#xff0c;该脚本指定了将要执行的动作。 s…

【java】java学习笔记

1. 快速入门 // Hello类 public class Hello {// main方法public static void main(String[] args) {System.out.println("hello world!");} } 在控制台输入以下命令&#xff0c;对.java文件&#xff08;源文件&#xff09;进行编译操作&#xff0c;生成Hello.clas…

Azure Machine Learning - 提示工程高级技术

本指南将指导你提示设计和提示工程方面的一些高级技术。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&#xff0c…

探索 MajicStudio:一款多功能视频编辑软件

一、产品简介 MajicStudio是一款基于人工智能的图片编辑与设计工具&#xff0c;拥有简洁的界面与丰富功能。采用深度学习和计算机视觉技术可以自动识别图片要素。 二、应用场景 MajicStudio的AI图像功能适用于多场景&#xff0c;包括艺术设计、电商、游戏和文创等场景。 三、…

Vim:文本编辑的强大利器

Vim&#xff1a;文本编辑的强大利器 概述1. 工作模式1.1 普通模式1.2 插入模式1.3 可视模式 2. 代码示例2.1 移动光标2.2 复制和粘贴2.3 查找和替换 3. 应用场景结语 概述 Vim&#xff08;Vi Improved&#xff09;是一款强大的文本编辑器&#xff0c;广泛应用于Linux和Unix系统…

python线程中的semaphore信号量是什么

python中的线程之semaphore信号量 semaphore是一个内置的计数器&#xff0c;每当调用acquire()时&#xff0c;内置计数器-1&#xff1b;每当调用release()时&#xff0c;内置计数器1。 计数器不能小于0&#xff0c;当计数器为0时&#xff0c;acquire()将阻塞线程直到其他线程…

【lesson16】MySQL表的基本操作update(更新)和delete(删除)

文章目录 表的基本操作介绍update建表测试 delete建表测试 表的基本操作介绍 CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; update 建表 这里就不建表了&#xff0c;因为之前就建过了&#xff0c;这里给大家…

求奇数的和 C语言xdoj147

题目描述&#xff1a;计算给定一组整数中奇数的和&#xff0c;直到遇到0时结束。 输入格式&#xff1a;共一行&#xff0c;输入一组整数&#xff0c;以空格分隔 输出格式&#xff1a;输出一个整数 示例&#xff1a; 输入&#xff1a;1 2 3 4 5 0 6 7 输出&#xff1a;9 #inclu…

drf知识--02

APIView执行流程分析 源码分析&#xff1a; # 1 在路由中&#xff1a;path(books/, views.BookView.as_view()),请求来了 # 2 先看 as_view()---->APIView的 as_view---》as_view执行结果跟之前一样&#xff0c;去除了csrf认证classmethoddef as_view(cls, **initkwargs):vi…

青少年CTF-qsnctf-Web-PingMe02

题目环境&#xff1a; 题目难度&#xff1a;★ 题目描述&#xff1a;诶&#xff1f;又是一道Ping题目诶&#xff01; 给了一个ip参数 传参&#xff1a; ?ip1.1.1.1 有回显结果 使用英文分号";"进行连接后续命令 列出此路径下的目录和文件 ?ip1.1.1.1;ls 列出根目录…

vue3表格导入导出.xlsx

在这次使用时恰好整出来了&#xff0c;希望大家也能学习到&#xff0c;特此分享出来 使用前确保安装以下模块&#xff0c;最好全局配置element-plus ### 展示一下 ### ###导出选项 ### ###导入de数据 ### 安装的模块 npm install js-table2excel // 安装js-table2excel n…

链表相关题目(数据结构期末复习)

题目要求 下面算法 FB1 将一个带头节点的单链表LA 分解为两个具有相同结构的单链表 LB&#xff0c;LC&#xff0c; 其中LB中节点为LA中值小于0的节点&#xff0c;而LC中节点为LA中值大于或等于0的节点。请在空白处填上合理的语句。 翻译&#xff1a;LA 初始链表&#xff1b;L…

Python图像文字识别详解,实战代码

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在现代计算机视觉和图像处理应用中&#xff0c;文字识别是一个重要的任务。本篇博客将详细介绍如何使用Python中的文字识别库&#xff0c;以及一些优秀的开源工具&#xff0c;来实现对图片中文字的准确识别。通过…