算法题解---字符串类

简介: 字符串类

CSDN话题挑战赛第2期

参赛话题:算法题解

🎃学习算法可能是为了面试也可能是为了竞赛,记录自己写下的题目,整理成一篇精美的题解,不仅能加深自己的印象,还能帮助学习算法的他人,更主要是为了检验自己是否掌握了这道题,今天就给大家分享两道与字符串有关的题.

🎨题目描述

题目一描述

对于一个长度为 n 字符串,我们需要对它做一些变形。首先这个字符串中包含着一些空格,就像Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如"Hello World"变形后就变成了"wORLD hELLO"。

数据范围: 1 ≤ n ≤ 10^6 , 字符串中包括大写英文字母、小写英文字母、空格。

进阶:空间复杂度 O(n)O(n) , 时间复杂度 O(n)O(n)

输入描述:

给定一个字符串s以及它的长度n(1 ≤ n ≤ 10^6)

返回值描述:

请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。

题目二描述

给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。

数据范围: 0 ≤ n ≤ 5000, 0 ≤ len(strs) ≤ 5000

进阶:空间复杂度 O(1)O(1),时间复杂度 O(n*len)O(n∗len)

示例1

输入:

[“abca”,“abc”,“abca”,“abc”,“abcc”]

返回值:

“abc”

👑题目链接

题目一https://www.nowcoder.com/practice/c3120c1c1bc44ad986259c0cf0f0b80e?tpId=295&tqId=44664&ru=%2Fpractice%2Fc3120c1c1bc44ad986259c0cf0f0b80e&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295

题目二

https://www.nowcoder.com/practice/28eb3175488f4434a4a6207f6f484f47?tpId=295&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295

🥁思路讲解

  • 题目一

步骤一: 先通过空格将字符切割反转,然后放进一个反转数组,在将数组拼接成一个字符串

步骤二: 对字符串逐一排查,利用大小写对应的ASCII码范围判断判断字符的大小写并进行转换

  • 题目二
  • 步骤: 有字符串数组[“abca”,“abc”,“abca”,“abc”,“abcc”],将它的子字符串想象成如下图的结构,每一行是字符串数组的元素,每一列是要比较的字符。当我们求公共前缀时,可以用任意一个子字符串与其他子字符串比较,从第一个字符开始,逐位比较,即可找最长公共前缀。

d6d06e73c6974dc1ad9c5c925296ad95.gif

🥉模板代码

//题目一
function trans(s, n){
    //输入为空时
        if(!s || !n) {
            return ''
        }
        let transWord = ''
    // 翻转
    const revStrArr = s.split(' ').reverse() ;//空格分割成一个反向数组
    const   reverStr = revStrArr.join(' '); //通过空格连接成一个字符串
    // 大小写转换
    for(let i = 0;i < reverStr.length;i++){
        const code = reverStr.charCodeAt(i);
        if(code >= 97 && code <= 122){
            transWord += reverStr[i].toUpperCase()
        } else if(code >= 65 && code <=90){
            transWord += reverStr[i].toLowerCase()
        } else{
            transWord += ' '
        }
    }
    return transWord
}
//题目二
/**
 *
 * @param strs string字符串一维数组
 * @return string字符串
 */
function longestCommonPrefix(strs) {
  // write code here
  // 判断字符串的长度
  if(!strs.length){
      return '';
  }
  let maxLeng = '';
  // 以数组中第一个字符串为基准
  for(let i = 0;i < strs[0].length;i++){
      let j = 0;
      // 数组中其他字符串与第一位字符串进行逐位比较是否相等
      while(j < strs.length-1){
          if(strs[j][i] == strs[j+1][i]){
              j++;
          } else{
              return maxLeng;
              // console.log(maxLeng)
          }
      }
      maxLeng += strs[0][i]
  }
  return strs[0]
}

🏀感想

算法非常考验一个人的逻辑和思维,所以当我们看到一个算法题的时候,不可盲目下笔,首先应该思考应该用那种方法来解决合适,同时我们也要考虑到解决这个问题会用到api文档中的那些方法,然后我们可以用注释的方式

先把步骤写下来,最后在一步步的写下代码,这样的方式来写代码,有步骤,报错也好找源头.

✨✨看完有收获的小伙伴们,来一个一键三连哦🥰


目录
相关文章
|
3月前
|
算法
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
|
1月前
|
算法
两个字符串匹配出最长公共子序列算法
本文介绍了最长公共子序列(LCS)问题的算法实现,通过动态规划方法求解两个字符串的最长公共子序列,并提供了具体的编程实现细节和示例。
85 1
两个字符串匹配出最长公共子序列算法
|
1月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
33 4
|
3月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
40 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
3月前
|
算法 Java
掌握算法学习之字符串经典用法
文章总结了字符串在算法领域的经典用法,特别是通过双指针法来实现字符串的反转操作,并提供了LeetCode上相关题目的Java代码实现,强调了掌握这些技巧对于提升算法思维的重要性。
|
3月前
|
数据采集 算法 数据可视化
基于K-Means聚类算法对球员数据的聚类分析,可以自主寻找最优聚类数进行聚类
本文介绍了一个基于K-Means聚类算法的NBA球员数据分析项目,该项目通过采集和分析球员的得分、篮板、助攻等统计数据,使用轮廓系数法和拐点法确定最优聚类数,将球员分为不同群组,并提供了一个可视化界面以便直观比较不同群组的球员表现。
基于K-Means聚类算法对球员数据的聚类分析,可以自主寻找最优聚类数进行聚类
|
4月前
创建KNN类
【7月更文挑战第22天】创建KNN类。
34 8
|
4月前
|
自然语言处理 算法 搜索推荐
字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析
在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介绍这个问题。
278 1
|
4月前
|
数据采集 算法 JavaScript
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
JavaScript字符串搜索涵盖`indexOf`、`includes`及KMP算法。`indexOf`返回子字符串位置,`includes`检查是否包含子字符串。KMP是高效的搜索算法,尤其适合长模式匹配。示例展示了如何在数据采集(如网页爬虫)中使用这些方法,结合代理IP进行安全搜索。代码示例中,搜索百度新闻结果并检测是否含有特定字符串。学习这些技术能提升编程效率和性能。
120 1
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
|
4月前
|
算法 数据库