首页 > 编程语言 >代码随想录算法训练营第九天 | 151.翻转字符串里的单词、卡码网:55.右旋转字符串、28. 实现 strStr()、459.重复的子字符串

代码随想录算法训练营第九天 | 151.翻转字符串里的单词、卡码网:55.右旋转字符串、28. 实现 strStr()、459.重复的子字符串

时间:2024-07-16 18:26:01浏览次数:14  
标签:第九天 string int needle 随想录 next 字符串 size

151.翻转字符串里的单词

题目:. - 力扣(LeetCode)

思路:用快慢双指针重置空格,先整体翻转再局部翻转

代码:

class Solution {
public:
    void removeSpace(string &s){
        int slow=0;
        for(int fast=0;fast<s.size();fast++){
            if(slow!=0&&s[fast]!=' ')
            s[slow++]=' ';
            while(fast<s.size()&&s[fast]!=' '){
                s[slow++]=s[fast++];
            }
        }
    s.resize(slow);
    }
    string reverseWords(string s) {
    removeSpace(s);
    reverse(s.begin(),s.end());
    int slow=0;
    for(int i=0;i<s.size();i++){
    if(s[i]==' '){
        reverse(s.begin()+slow,s.begin()+i);
        slow=i+1;
    }
    if(i==s.size()-1){
            reverse(s.begin()+slow,s.end());
        }
    }
    return s;
    }
};

卡码网:55.右旋转字符串

题目:55. 右旋字符串(第八期模拟笔试) (kamacoder.com)

思路:和上题相同,先整体翻转再局部翻转

代码:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    string s;
    cin>>n;
    cin>>s;
    reverse(s.begin(),s.end());
    reverse(s.begin(),s.begin()+n);
    reverse(s.begin()+n,s.end());
    cout<<s<<endl;
    return 0;
}

28. 实现 strStr()

题目:. - 力扣(LeetCode)

思路:看猫片算法的经典应用。

代码:

class Solution {
public:
    void getNext(int* next,const string& s){
        int j=0;
        next[0]=0;
        for(int i=1;i<s.size();++i){
            while(j>0&&s[i]!=s[j]){
                j=next[j-1];
            }
            if(s[i]==s[j]){
                j++;
            }
            next[i]=j;
        }
    }
    int strStr(string haystack, string needle) {
    int next[needle.size()];
    getNext(next,needle);
    int j=0;
    int i=0;
    for(i=0;i<haystack.size();++i){
        while(j>0&&needle[j]!=haystack[i])
        j=next[j-1];
        if(needle[j]==haystack[i])
        j++;
        if(j==needle.size())
        break;
    }
    if(i!=haystack.size()){
        return i-needle.size()+1;
    }
    else
    return-1;
    }
};

459.重复的子字符串

题目:. - 力扣(LeetCode)

思路:看猫片,利用next数组的公共前后缀相等。

代码:

class Solution {
public:
    void getNext(int* next,const string& s){
        int j=0;
        next[0]=0;
        for(int i=1;i<s.size();++i){
            while(j>0&&s[j]!=s[i]){
                j=next[j-1];
            }
            if(s[j]==s[i]){
                j++;
            }
            next[i]=j;
        }
    }
    bool repeatedSubstringPattern(string s) {
    if(s.size()==0)
    return false;
    int next[s.size()];
    getNext(next,s);
    if(next[s.size()-1]!=0&&s.size()%(s.size()-next[s.size()-1])==0)
    return true;
    else
    return false;
    }
};

标签:第九天,string,int,needle,随想录,next,字符串,size
From: https://blog.csdn.net/dtgfhfd/article/details/140362414

相关文章

  • 代码随想录算法训练营第八天 | 344.反转字符串、541. 反转字符串II、卡码网:54.替换数
    344.反转字符串题目:.-力扣(LeetCode)思路:用swap遍历一个循环就行了。代码:classSolution{public:voidreverseString(vector<char>&s){for(inti=0;i<s.size()/2;++i){swap(s[i],s[s.size()-i-1]);}}};541.反转字符串II题目:.-力扣(L......
  • 「代码随想录算法训练营」第十二天 | 二叉树 part2
    226.翻转二叉树题目链接:https://leetcode.cn/problems/invert-binary-tree/题目难度:简单文章讲解:https://programmercarl.com/0226.翻转二叉树.html视频讲解:https://www.bilibili.com/video/BV1sP4y1f7q7题目状态:通过个人思路:类似二叉树的层序遍历的变形,创建一个队列,先......
  • JavaScript字符串对象查找字符出现次数
      查找字符串中某个字符出现的次数思路:1.根据indexOf()方法的特性只会返回要查找的字符出现再字符串中的第一次的位置     2.而且想要继续往后查找则需要跳过前一个已经查询了的字符的位置,则可以在原先位置加       1后再查找     3.将......
  • 104-Python中字符串索引和切片
    Python中字符串索引和切片greeting_str='Hey,James!'#打印字符串长度print('字符串的长度为:')print(len(greeting_str))#字符串的长度为:#11#打印每个字符和对应的索引forindex,charinenumerate(greeting_str):print(f"字符:{char},索引:{index}")#字符:H,索......
  • 代码随想录算法训练营第23天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树
    代码随想录算法训练营第22天|669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树修剪二叉搜索树:https://leetcode.cn/problems/trim-a-binary-search-tree/description/代码随想录:https://programmercarl.com/0669.修剪二叉搜索树.html#......
  • QT字符串QString
    QString#include<QString>追加字符QStringstr1="hello";QStringstr2="world";str1.append(str2);//str1="helloworld"str1.append("!");//str1="helloworld!......
  • 字符串反转、句子逆序 题目
    题目HJ12字符串反转描述输入描述:输出描述:示例:分析:代码:大佬代码:HJ13句子逆序描述输入描述:输出描述:示例:分析:代码:大佬代码:HJ12字符串反转描述接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)输入描述:输入一行,为一个......
  • 算法思想总结:字符串
    一、最长公共前缀.-力扣(LeetCode)思路1:两两比较 时间复杂度mn 实现findcomon返回两两比较后的公共前缀classSolution{public:stringlongestCommonPrefix(vector<string>&strs){//两两比较stringret=strs[0];size_tn=strs......
  • 力扣第八题——字符串转换整数
    题目介绍请你来实现一个 myAtoi(strings) 函数,使其能将字符串转换成一个32位有符号整数。函数 myAtoi(strings) 的算法如下:空格:读入字符串并丢弃无用的前导空格("")符号:检查下一个字符(假设还未到字符末尾)为 '-' 还是 '+'。如果两者都不存在,则假定结果为正。转换:......
  • 代码随想录算法训练营第十三天 | 144.二叉树的前序遍历、94、二叉树的中序遍历、145、
    144.二叉树的前序遍历题目:.-力扣(LeetCode)思路:有递归法和使用栈来模拟递归的迭代法。代码:1.递归/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nu......