首页 > 其他分享 >4 字符串

4 字符串

时间:2023-07-24 16:14:22浏览次数:26  
标签:输出 示例 int 反转 字符串 输入

字符串

1 反转字符串

题目:

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

示例 1:
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:
输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

思路:

双指针法

代码:

void reverseString(vector<char>& s) {
    for(int i = 0,j=s.size()-1;i < s.size()/2 ;i++,j--){
        swap(s[i],s[j]);
    }
}

2 反转字符串Ⅱ

题目:

给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。

如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例:

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

思路:

2k为一段,for循环反转

代码:

string reverseStr(string s, int k) {
    for(int i = 0;i < s.size();i += 2*k){
        if(i + k <= s.size()) reverse(s.begin()+i,s.begin()+i+k);
        else reverse(s.begin()+i,s.end());
    }
    return s;
}

3 替换空格

题目:

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1: 输入:s = "We are happy."

输出:"We%20are%20happy.

思路:

第一遍检查空格数量,第二遍从后往前开始替换

代码:

string replaceSpace(string s) {
    int spaceNum = 0;
    for(int i = 0; i < s.size(); i++){
        if(s[i] == ' ') spaceNum++;
    }
    int oldSize = s.size();
    s.resize(oldSize + spaceNum * 2);
    for(int left = oldSize - 1,right = s.size() - 1; left < right;left--,right--){
        if(s[left]!= ' ') {
            s[right] = s[left];
        }
        else {
            s[right--] = '0';
            s[right--] = '2';
            s[right] = '%';
        }
    }
    return s;
}

4 翻转字符串里的单词

题目:

给定一个字符串,逐个翻转字符串中的每个单词。

示例 1:
输入: "the sky is blue"
输出: "blue is sky the"

示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

思路:

双指针法去除多余空格,先整体反转,再反转每一个单词。

代码:

 void reverse(string&s,int start ,int end){
        for(int i = start,j = end-1;i<j;i++,j--){
            swap(s[i],s[j]);
        }
    }
    void removeExtraSpace(string&s){
        int slow = 0;
        for(int i=0;i<s.size();++i){
            if(s[i] != ' '){
                if(slow != 0){
                    s[slow++] = ' ';
                }
                while (i < s.size() && s[i] != ' ') { 
                    s[slow++] = s[i++];
                }
            }
        }
        s.resize(slow);
    }
    string reverseWords(string s) {
        removeExtraSpace(s);
        reverse(s,0,s.size());
        for(int i = 0,j=0;i<s.size();i++){
            if(s[i]==' ') {
                reverse(s,j,i);
                j = i + 1;
            }
            if(i == s.size()-1) reverse(s,j,i+1);
        }
        return s;

注意点reverse的开闭区间问题

5 左旋转字符串

题目:

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"

示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"

限制:
1 <= k < s.length <= 10000

思路:

分成两个部分,左旋的部分反转一次,其余部分翻转一次,整体再反转一次即可

代码:

void reverse(string &s,int i,int j){
    for(;i<j;i++,j--) swap(s[i],s[j]);
}
string reverseLeftWords(string s, int n) {
    reverse(s,0,n-1);
    reverse(s,n,s.size()-1);
    reverse(s,0,s.size()-1);
    return s;
}

注意点:边界条件

6 实现strStr()

题目:

实现 strStr() 函数。

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。

示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2

示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1

说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符

思路:

滑动窗口法

代码:

int strStr(string haystack, string needle) {
    if(haystack.size()< needle.size()) return -1;
    for(int i = 0;i <= haystack.size()-needle.size();i++){
        int fast_i = i;
        int fast_j = 0;
        while(haystack[fast_i]==needle[fast_j]){
            if(fast_j == needle.size() - 1) return i;
            fast_i++;
            fast_j++;
        }
    }
    return -1;
}

7 重复的字符串

题目:

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。

示例 1:
输入: "abab"
输出: True
解释: 可由子字符串 "ab" 重复两次构成。

示例 2:
输入: "aba"
输出: False

示例 3:
输入: "abcabcabcabc"
输出: True
解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)

思路:

KMP

代码:


标签:输出,示例,int,反转,字符串,输入
From: https://www.cnblogs.com/mobbu/p/17577485.html

相关文章

  • 字典序相关字符串问题的 SAM 解法
    前文(SAM基础)如果你并不是很熟SAM,可以看看我远古时期的blog:浅析后缀自动机--Wallace--博客园(cnblogs.com)缘起为什么突然想到这个方面的东西,是因为在ZJU校队预组队时做到一个CF-GYM-100418C,当时一眼SA但实际上根本不熟。赛后发现有位国外老哥随手SAM暴打,一点都......
  • 转!XML文件和DOM Document、String字符串三种类型之间的相互转换
    转自:https://www.cnblogs.com/fightingdeng1998/p/16047075.html用的包是org.w3c.dom.Document下的/***@Authordengzp*@Date2022/3/22*@Version1.0*@Description*/publicclassOperateXMLByDOM{/***将给定文件的内容或者给定URI的内容解析......
  • Shell编程教程 - 字符串变量表达式
    1.字符串变量表达式基本比较示例脚本-`string_comparison.sh`字符串长度检查示例脚本-`string_length.sh`逻辑运算符连接表达式示例脚本-`logical_operators.sh`2.执行示例脚本3.结论大树哥个人信息本教程将向你介绍Shell脚本中字符串变量表达式的使用。我们将学习如何......
  • Day 4: Shell字符串处理
    学习目标学习内容1.字符串拼接2.字符串替换3.字符串截取4.练习任务大树哥个人信息学习目标学习Shell中的字符串处理技巧。掌握字符串的拼接、替换和截取方法。练习编写脚本,处理和操作字符串数据。学习内容今天我们将学习如何在Shell编程中处理和操作字符串。1.......
  • android 日期字符串转时间戳
    Android日期字符串转时间戳教程概述在Android开发中,经常会遇到将日期字符串转换为时间戳的需求。本文将向你介绍整个转换流程,并提供相应的代码示例。转换流程下面是将Android日期字符串转换成时间戳的一般流程,可以用表格展示如下:步骤描述1获取日期字符串2创建日......
  • java 如何字符串中的换行去除
    项目方案:Java字符串中的换行去除1.项目概述本项目旨在提供一种在Java中去除字符串中的换行符的方案。在许多情况下,我们需要处理包含换行符的字符串,例如从文件中读取的文本、网络请求返回的数据等。本项目将介绍几种常用的方法,并提供代码示例帮助读者理解和实践。2.解决方案......
  • java 去除字符串中的特殊符号
    Java去除字符串中的特殊符号在Java编程中,我们经常需要处理字符串,有时候字符串中包含一些特殊符号,例如标点符号、空格、换行符等。在某些情况下,我们需要从字符串中去除这些特殊符号,只保留有效的字符。本文将介绍如何使用Java代码去除字符串中的特殊符号。1.使用正则表达式去除特......
  • 4. 字符串转换数值atoi atol atof
    #include<stdlib.h>intatoi(constchar*nptr);longatol(constchar*nptr);#include<stdio.h>#include<string.h>#include<stdlib.h>voidtest01(){printf("%d\n",atoi("123"));//123printf......
  • java 字符串转16进制
    Java字符串转16进制在Java编程中,我们经常需要将字符串转换为十六进制表示形式。十六进制表示法是一种常用的表示字节数据的方式,对于处理二进制数据特别有用。本文将介绍如何在Java中将字符串转换为十六进制表示形式,并提供相应的代码示例。什么是十六进制?十六进制是一种基于16个......
  • java 字符串中判断是汉字还是数字
    判断java字符串中的汉字和数字作为经验丰富的开发者,我非常乐意教你如何在Java中判断字符串中的汉字和数字。下面是一个简单的流程表格,包含了整个过程的步骤:步骤描述1获取字符串中的每个字符2判断字符是否为汉字3判断字符是否为数字接下来我将详细解释每个......