leetcode-explore-learn-数据结构-数组3-字符串

  • 1.简述
  • 2.例题
    • 2.1 二进制求和
    • 2.2实现strStr()
    • 2.3最长公共前缀

本系列博文为leetcode-explore-learn子栏目学习笔记,如有不详之处,请参考leetcode官网:https://leetcode-cn.com/explore/learn/card/array-and-string/198/introduction-to-array/768/

1.简述

字符串是字符构成的数组。

字符串一些常用的函数:
(1)比较函数,Python支持云算法重载,可以使用"=="来比较字符串。
(2)可修改性,在Python中字符串是一个不可改写的数组;一经定义只能访问字符串中的元素,而不能直接改变某个元素。在C++中字符串是可修改的。
(3)字符串连接,python 中支持两个字符串直接相加操作进行字符串连接

2.例题

2.1 二进制求和

给一个二进制字符串,返回他们的和,用二进制表示。
基本思想:
两个字符串诸位相加,设置一个符号位flag用于存储进位信息
难点边界条件的确定:char=int(a[i])+int(b[i])+flag,chat的可能取值:0,1,2,3
(1)i=[-1,-2,-l_min]遍历相加逐个元素至较短字符串遍历完成
(2) i=[-l_min-1,-l_min-2m,…,-l_max]:char=flag+int(a[i]),char的可能取值:0,1,2
(3)最后还需要检查是否有进位情况

class Solution(object):def addBinary(self, a, b):""":type a: str:type b: str:rtype: str"""res=[]l_a=len(a)l_b=len(b)l_min=min(l_a,l_b)l_max=max(l_a,l_b)flag=0for i in range(-1,-l_min-1,-1):char=int(a[i])+int(b[i])+flagflag=0if char==0:res.append(0)elif char==1:res.append(1)elif char==2:res.append(0)flag=1else:res.append(1)flag=1print (res,flag)if l_a>l_b:for i in range(-l_min-1,-l_max-1,-1):#print(i,res,flag)char=flag+int(a[i])flag=0if char==0:res.append(0)elif char==1:res.append(1)elif char==2 :res.append(0)flag=1if l_a<l_b:#print(l_min,l_max)for i in range(-l_min-1,-l_max-1,-1):#print(i,flag,res)char=flag+int(b[i])flag=0if char==0:res.append(0)elif char==1:res.append(1)elif char==2:res.append(0)flag=1#print(res,flag)if flag==1:res.append(1)l_res=len(res)res_s=""for i in range(l_res-1,-1,-1):res_s+=str(res[i])return res_

2.2实现strStr()

给定一个haystack字符串和一个needle字符串,在haystack字符串中找出needle字符串出现的第一个位置。如果不存在则返回0.

思路,遍历haystack字符串,找出needle字符串的第一个字符,然后依次往后找,直至所有都匹配上然后返回结果。

注意点:
(1)当needle是空时,如果返回-1(说明在一个字符串中找不到空字符串);如果返回0(说明haysta[0]开始的字符串匹配了空字符串)–c++语言中是这么定义的
(2)两个都为空时,返回0
(3)len(haystack)<len(needle)直接返回-1

class Solution(object):def strStr(self, haystack, needle):""":type haystack: str:type needle: str:rtype: int"""l_s=len(haystack)l_n=len(needle)if l_n==0:return 0if l_s==0:return -1if l_s<l_n:return -1for i in range(l_s-l_n+1): # i:[0,1,...,l_s-l-n]for j in range(l_n): # i:[0,1,...,l_n-1]l-s-l_n#print(i,j)if  haystack[i+j]!=needle[j]:breakif j==l_n-1:return ireturn -1

2.3最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果公共前缀前缀不存在,返回空字符串""
用一个win区存公用前缀,找最短的字符串,将其元素依次加入win中。判断剩余字符串是否有该前缀字符。

class Solution(object):def longestCommonPrefix(self, strs):""":type strs: List[str]:rtype: str"""n=len(strs)if n==0:return ""short_index=-1l_min=float("INF")for i  in range(n):if len(strs[i])<l_min:l_min=len(strs[i])short_index=iwin=""i=0while(i<l_min):win=strs[short_index][:i+1]for j in range(n):if strs[j][:i+1]!=win:return win[:i]i+=1return win

算法(5)-leetcode-explore-learn-数据结构-字符串相关推荐

  1. leetcode旋转数组 c语言,leetcode explore 初级算法第三题,旋转数组代码实现

    leetcode explore 初级算法第三题,旋转数组代码实现.原题链接: 题目分析 因为题目不是很长,这里把题目贴出来: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. ...

  2. 【数据结构与算法】之深入解析“压缩字符串”的求解思路与算法示例

    一.题目要求 给你一个字符数组 chars,请使用下述算法压缩:从一个空字符串 s 开始.对于 chars 中的每组连续重复字符: 如果这一组长度为 1 ,则将字符追加到 s 中: 否则,需要向 s ...

  3. 【必备算法】字符串(反转问题):LeetCode题 344. 反转字符串,541. 反转字符串 II,917. 仅仅反转字母

    写在前面,反转数组的思路很简单,就是借助双指针不断将首尾相应位置的字符交换.Java模板如下: public void reverseArray(char[] arr) {int i = 0, j = ...

  4. 算法工程师思维导图—数据结构与算法

    卖萌屋的妹子们(划掉)作者团整理的算法工程师思维导图,求职/自我提升/查漏补缺神器.该手册一共分为数据结构与算法.数学基础.统计机器学习和深度学习四个部分. 点击这里查看具体使用指南.该手册有两种获取 ...

  5. 第02期 基础算法(Leetcode)刻意练习开营计划

    背景 如果说 Java 是自动档轿车,C 就是手动档吉普.数据结构与算法呢?是变速箱的工作原理.你完全可以不知道变速箱怎样工作,就把自动档的车子从 A 开到 B,而且未必就比懂得的人慢.写程序这件事, ...

  6. 算法(6)-leetcode-explore-learn-数据结构-数组字符串的双指针技巧

    leetcode-explore-learn-数据结构-数组4-双指针技巧 1.双指针技巧--适用情形1 1.1概述 1.2 例题 1.2.1 反转字符串 1.2.2数组拆分 1.2.3 两数之和2 ...

  7. 对“基础算法(LeetCode)刻意练习活动”的复盘

    第二期基础算法(Leetcode)刻意练习训练营 已经结束了,本次刻意练习采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知识点选择了 三个简单.两个中等.一个困难 ...

  8. AcWing基础算法课Level-2 第二讲 数据结构

    AcWing基础算法课Level-2 第二讲 数据结构 单链表 AcWing 826. 单链表3453人打卡 双链表 AcWing 827. 双链表2865人打卡 栈 AcWing 828. 模拟栈3 ...

  9. Python数据结构与算法(1.1)——数据结构与算法导论

    Python数据结构与算法(1.1)--数据结构与算法导论 0. 学习目标 1. 数据结构概述 1.1 什么是数据结构 1.2 逻辑结构和物理结构 1.3 抽象数据类型 1.4 数据结构学习的必要性 ...

  10. C++描述 LeetCode 1768. 交替合并字符串

    C++描述 LeetCode 1768. 交替合并字符串   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客,唯 ...

最新文章

  1. Redis 高级特性(4)— 单线程架构
  2. Error in ggplot(df, aes(x = x, y = y)) : could not find function “ggplot“
  3. R语言F分布函数F Distribution(df, pf, qf rf )实战
  4. matlab中的科学记数法变成小数形式
  5. CF1322B-Present【双指针】
  6. --4、实验室设备管理(表)
  7. D3.js 力导向图来处理拓扑图
  8. (转)mahout推荐引擎使用hadoop
  9. 被开除的Roadstar合伙人决定暂不回应,“报销大保健”也能忍?
  10. IDEA使用和实用小技巧
  11. 深度学习pytorch基础入门教程(1小时)-张量、操作、转换
  12. python中的threading_python中threading的用法
  13. 这4款甘特图绘制工具,都是老原精心整理
  14. html5富文本编辑器菜鸟手册,富文本编辑器froalaEditor(全面)附教程
  15. linux 录音软件安装,ubuntu 录音软件audacity 安装和使用
  16. 在Word2019中,如何让回车符消失
  17. cocos creator 设置开启canvas 透明后 半透明图片 不正常的 官方解决办法
  18. 爱读掌阅java版_爱读掌阅app官方下载-爱读掌阅旧版本 - 超好玩
  19. 如何一键修改视频画面的尺寸大小呢?
  20. PDF(复制、黏贴)时出现乱码之处理方法之一

热门文章

  1. win7上安装wince6.0
  2. char 转wchar_t 及wchar_t转char
  3. Linux 编译 libc log,在Android的源码中添加LOG
  4. Linux添加网站后无法显示,Linux:SElinux导致网站无法访问
  5. 【转】30分钟学会UML类图
  6. 【转】4.2使用jQuery.form插件,实现完美的表单异步提交
  7. 【转】在无人值守程序(服务)中调用Microsoft Graph
  8. 第十二节: EF的三种模式(二) 之 ModelFirst模式(SQLServer为例)
  9. 计算机课数学,这4个专业,对数学要求很高,数学不好的慎选!
  10. python编辑器spyder运行_使用spyder编译器单步调试python