当前位置: 首页 > news >正文

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

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.lryc.cn/news/263848.html

相关文章:

  • WinSW设置应用程序开机启动
  • Leetcode—96.不同的二叉搜索树【中等】
  • 正则表达式零宽断言
  • uni-app学习记录
  • API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph
  • Databend 开源周报第 124 期
  • Arduino开发实例-液体流量测量
  • 【idea】解决sprintboot项目创建遇到的问题
  • ADC芯片CS1237在电子秤方案的优势
  • Leetcode的AC指南 —— 哈希表:202. 快乐数
  • 机器学习 项目结构 数据预测 实验报告
  • [Verilog] 设计方法和设计流程
  • C语言:指向数组的指针和指向数组元素的指针
  • SQL基础:SQL 介绍和数据库基础
  • SpringSecurity入门
  • iOS 应用在前台时显示通知
  • Hamming space
  • anaconda 安装 使用 pytorch onnx onnxruntime
  • Web请求与响应
  • ADS学习笔记(一)——更新中
  • 智能优化算法应用:基于冠状病毒群体免疫算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 小型气象站是什么?
  • 官方指定Jmeter配置JVM堆内存方式
  • spark-常用算子
  • 《opencv实用探索·二十一》人脸识别
  • 前端项目配置下载源npm, yarn,pnpm
  • Elasticsearch之ik中文分词篇
  • 2023_Spark_实验三十:测试Flume到Kafka
  • urllib2 HTTP头部注入
  • 在 WebRTC 中,Offer/Answer 模型是协商 WebRTC 连接参数的关键部分