首页 > 其他分享 >LeetCode 面试经典150题---008

LeetCode 面试经典150题---008

时间:2024-04-18 15:22:35浏览次数:25  
标签:150 cur numRows --- 字符串 单词 008 空格 string

#### 151. 反转字符串中的单词

给你一个字符串 s ,请你反转字符串中 单词 的顺序。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
1 <= s.length <= 104
s 包含英文大小写字母、数字和空格 ' '
s 中 至少存在一个 单词
题意比较简单,就是反转单词之后使用单个空格连接。这种题一般都是普通的模拟即可,就是需要考虑的情况比较多。定义两个指针ij,用来表示单词的首尾,k表示当前存储的下标,除了第一个单词,后面每个单词前面都需要加上一个' ',每次需要reverse一下,因为我们最后需要reverse,就可以保证顺序不变了。

class Solution {
public:
    string reverseWords(string s) {
        int i = 0, j = 0,k = 0;
        while(j < s.size()){
            j = i;
            while(j < s.size() && s[j] == ' ') j ++;
            if(j == s.size()) break;
            i = j; 
            while(j < s.size() && s[j] != ' ') j ++;
            if(k) s[k ++] = ' ';
            reverse(s.begin() + i, s.begin() + j);
            while(i < j) s[k ++] = s[i ++];
        }
        s.erase(s.begin() + k, s.end());
        reverse(s.begin(), s.begin() + k);
        return s;
    }
};

#### 6. Z 字形变换

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
1 <= s.length <= 1000
s 由英文字母(小写和大写)、',' 和 '.' 组成
1 <= numRows <= 1000
经典的模拟和规律题,给你的是一个Z字形的字符串,你需要按照行读取。这种题一般就是找规律即可,首先我们可以看第一行和最后一行,我们假设此时的行数为ii从0开始,对于第一行的每个元素,需要走2 * (row - i - 1)到达下一个元素;对于最后一行的每个元素,需要走2 * i到达下一个元素,我们对这两种情况特判即可。再来考虑一般情况,也就是不是第一行和最后一行,对于第i行,第一次到下一个元素需要走2 * (row - i - 1),第二次到下一个元素需要走2 * i,再到下一个元素又开始重复了,因此可以定义一个k,表示奇数次数还是偶数次数。

class Solution {
public:
    string convert(string s, int numRows) {
        string res = "";
        for(int cur = 0;cur < numRows;cur ++ ){
            int step = 0,k = 1, i = cur;
            if(i == 0) step = 2 * (numRows - cur - 1), k = 0;
            else if(i == numRows - 1) step = 2 * cur,k = 0;
            if(!step) step = 1;
            if(!k){
                while(i < s.size()) res += s[i], i += step;
            }
            else{
                while(i < s.size()){
                    if(k == 1) res += s[i],i += 2 * (numRows - cur - 1),k = 2;
                    else res += s[i], i += 2 * cur,k = 1;
                }
            }
        }
        return res;
    }
};

总结,都是模拟题,不过坑不少,基本不能一次过。

标签:150,cur,numRows,---,字符串,单词,008,空格,string
From: https://www.cnblogs.com/timeac-coder/p/18143598

相关文章

  • 每日一模块-collections
    Python的collections模块提供了很多高级的数据结构,使得我们在处理数据时能够更加方便和高效。下面我们将详细讲解collections模块中各个类的功能,并给出相应的样例。导入模块首先,我们需要导入collections模块:importcollections2.CounterCounter是一个字典子类,用于计数可哈......
  • ubuntu解决/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found的问题
    运行进程时报错./main:/lib/x86_64-linux-gnu/libc.so.6:version`GLIBC_2.38'notfound(requiredby./main)./main:/lib/x86_64-linux-gnu/libc.so.6:version`GLIBC_2.33'notfound(requiredby./main)./main:/lib/x86_64-linux-gnu/libc.so.6:version`G......
  • JTCR-包和接口-07
    包包用于划分类的命名空间,使得不同包中的同名类不会冲突。Java使用文件夹存储包,文件夹名和包名一致。Java运行时系统从当前目录中、CLASSPATH变量定义的值、-classpath指定的值这三种途径寻找包。包和成员访问可访问性private无修饰符protectedpublic同一个......
  • BGE M3-Embedding 模型介绍
    BGEM3-Embedding来自BAAI和中国科学技术大学,是BAAI开源的模型。相关论文在https://arxiv.org/abs/2402.03216,论文提出了一种新的embedding模型,称为M3-Embedding,它在多语言性(Multi-Linguality)、多功能性(Multi-Functionality)和多粒度性(Multi-Granularity)方面表现出色。M3-Embedding......
  • JTCR-深入了解方法和类-05
    方法重载一个类中存在多个同名方法,这些方法的形参类型或数量不同的现象称为方法重载。同名方法的返回值类型在判断是否构成重载时不予考虑。方法重载是支持多态的方式之一。当调用同名方法时,Java根据传入方法的实参类型、数量和顺序确定某个唯一精确匹配的方法,然后调用该方法;如......
  • L2-001 紧急救援
    原题链接题解确定起点和终点,求救援人数最长,路径最短的路径,只需要集群算法中优先队列中重载比较符修改一下就就行,由于数据量很小,所以输出路径的时候搜索就行(最优解唯一)code#include<bits/stdc++.h>usingnamespacestd;structnode{intto,val;};vector<node>G[505......
  • 2024-04-18 Umi配置文件简读
    Umi配置文件通常为.umirc.js或者config/config.js,这两个文件的作用是相同的,两个文件都存在时会优先加载`.umirc.js`,请只使用其中一个来作为配置项!以下是其常见配置项:plugins:配置插件列表。exportdefault{plugins:[['umi-plugin-react',{dva:true,antd:true......
  • OpenSSL测试-SM3
    第二题#include<stdio.h>#include<openssl/evp.h>intmain(){EVP_MD_CTX*mdctx;constEVP_MD*md;unsignedcharmd_value[EVP_MAX_MD_SIZE];unsignedintmd_len;inti;//初始化OpenSSLOpenSSL_add_all_algorithms();......
  • JTCR-继承-06
    继承基础classA{inti;voidm(){//body}}classBextendsA{intk;voidn(){//body}}没有类可以成为其自身的超类(superclass)。子类不能访问超类中的private成员。超类类型变量可以引用派生自该超类的子类对象,但是使用该变量只......
  • JTCR-介绍类-04
    类基础类表示一个新的数据类型。简单类的一般形式:classClassName{typeinstanceVariable;//...typemethod(parameterList){//方法体}//...}有些Java应用不需要main方法。定义对象new操作符在运行时动态地给一个对象分配内存并返回指向该......