首页 > 其他分享 >双指针(1)

双指针(1)

时间:2024-01-11 11:57:12浏览次数:23  
标签:string space int 反转 ans 指针

目录

344反转字符串

我如果要反转,就是最前面和最后面的字符进行交换,

//双指针的应用
class Solution {
public:
    void reverseString(vector<char>& s) {
        int left=0,right=s.size()-1;
        while(left<right)
        {
            char temp=s[left];
            s[left]=s[right];
            s[right]=temp;
            left++;
            right--;
        }
    }
};

替换数字

#include<bits/stdc++.h>

using namespace std;

//第一思路,遇到数字就塞一个number进去?
string solutionA(string s)
{
    string ans;
    
    int n=s.length();
    
    for(int i=0;i<n;i++)
    {
        if(isdigit(s[i]))
        {
            ans+="number";
        }
        else
        {
            ans+=s[i];
        }
    }
    return ans;
}

//如果原地呢?就在有数字的位置插入一个number
void solutionB(string& s)
{
    int i=0;
    while(i<s.length())
    {
        if(isdigit(s[i]))
        {
            s.replace(i,1,"number");
            i+=5;
        }
        i++;
    }
    
}

int main()
{
    string s;
    
    cin>> s;
    
    solutionB(s);
    
    cout<< s;
    
    return 0;
    
}

反转单词

  1. 第一思路,从后向前双指针,遇到space就说明一个字符结束了,然后把这个字符拷贝到ans里面,并加上一个space,最后再去掉最后的space就可以了
  2. 别人的思路:先反转整个string,然后再逐个反转单词这里需要
  • 移除空格,这里没掌握好移除元素的精髓,竟然想了半天都没想到双指针移除
  • 反转单词,这个比较简单
class Solution {
public:
    //第一思路,从后向前双指针,遇到space就说明一个字符结束了,然后把这个字符拷贝到
    //ans里面,并加上一个space,最后再去掉最后的space就可以了
    string solutionA(string s)
    {
        string ans;
        for(int n=s.length()-1;n>=0;n--)
        {
            if(s[n]==' ')
            {
                continue;
            }
            else{
                int i=n;
                while(i>=0&&s[i]!=' ')
                {
                    i--;
                }
                ans+=s.substr(i+1, n-i);
                ans+=' ';
                n=i;
            }
        }
        ans.erase(ans.length()-1);
        return ans;
    }
    //第二方法
    //类似27移除元素,感觉掌握的还是不够好啊,竟然没想到双指针
    void removeSpace(string & s)
    {
        int slowptr=0;
        int fastptr=0;
        while(s[fastptr]==' ')
        {
            fastptr++;
        }
        for(;fastptr<s.length();fastptr++)
        {
            if(s[fastptr]==' '&&s[fastptr-1]==s[fastptr])
            {
                continue;
            }
            else
            {
                s[slowptr]=s[fastptr];
                slowptr++;
            }
        }
        s.resize(slowptr);
        if(*(s.end()-1)==' ')
        {
            s.resize(s.length()-1);
        }
        
    }
    void reverse(string & s,int start,int end)
    {
        while(start<end)
        {
            swap(s[start],s[end]);
            start++;
            end--;
        }
    }
    string solutionB(string& s)
    {
        removeSpace(s);
        std::reverse(s.begin(),s.end());
        int start=0;
        int end=0;

        for(;end<s.length();end++)
        {
            while(end<s.length()&&s[end]!=' ')
            {
                end++;
            }
            reverse(s,start,end-1);
            start=end+1;
        }
        return s;
    }

    
    //空间O(1)
    string reverseWords(string s) {
        return solutionB(s);
    }
};

标签:string,space,int,反转,ans,指针
From: https://www.cnblogs.com/liviayu/p/17958006

相关文章

  • 双指针法又一感悟
    最开始做的时候没想到双指针法,用了简单的冒泡排序结果超时了,题解中的sort函数用的是快排。点击查看代码voidquick_sort(inta[],intl,intr){if(l<r){inti,j,x;i=l;j=r;x=a[i];while(i<j)......
  • 数组指针
    在数组指针中,*和[]的意义是相似的,都是优先降维数在降指针的级数比如p是一个指向n维数组的一级指针,那么p[][][]就是一个指向n-3维数组的指针,打了n个中括号之后就变成了指向一个点的指针,此时再*一下就变成了了值(或者再括号一下)如果p是一个指向n维数组的三级指针,那么打了n个中括号......
  • 《算法竞赛》---三指针
    ----双指针(尺取法)1.找出指定和的整数对----p37(书页)哈希表#include<bits/stdc++.h>usingnamespacestd;inta[100010];intmain(){ios::sync_with_stdio(false);cin.tie();cout.tie();unordered_map<int,bool>q;intn,m;cin>>n>>m;fo......
  • C++指针详解
    定义:指针是一个整数,一种存储内存地址的数字内存就像一条线性的线,在这条街上的每一个房子都有一个号码和地址类似比喻成电脑,这条街上每一个房子的地址是一个字节我们需要能够准确找到这些地址的方法,用来读写操作因此,指针就是这些地址。不要考虑类型,无论是什么类型的指针,都是用来保......
  • C 语言指针完全指南:创建、解除引用、指针与数组关系解析
    C语言中的指针创建指针我们可以使用引用运算符&获取变量的内存地址:intmyAge=43;//一个int变量printf("%d",myAge);//输出myAge的值(43)printf("%p",&myAge);//输出myAge的内存地址(0x7ffe5367e044)指针是一个将另一个变量的内存地址作为其值的变量。......
  • C 语言指针完全指南:创建、解除引用、指针与数组关系解析
    C语言中的指针创建指针我们可以使用引用运算符&获取变量的内存地址:intmyAge=43;//一个int变量printf("%d",myAge);//输出myAge的值(43)printf("%p",&myAge);//输出myAge的内存地址(0x7ffe5367e044)指针是一个将另一个变量的内存地址作为其值的变量......
  • 指针数组与数组指针的区别及相关知识
    区别:指针数组:定义int*p[n]可称为指针的数组,是数组,数组里的元素都是指针。也就是说数组存储的是指针,数组占多少字节由数组本身决定。指针数组+1不同类型的变化如下//eg:用指针parr指向一个一维数组intmain(){ int*parr[5]={0,1,2,3,4}; printf("%x\n",parr);//数组名代......
  • 数组指针的用法
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>//参数是数组形式voidprint1(intarr[3][5],intx,inty)//用数组形式接收,再接收传来的参数{ inti=0; intj=0; for(i=0;i<x;i++) { for(j=0;j<y;j++) { printf("%d",arr[i][j]);......
  • 数组指针
    数组指针是指针 用来存放数组的地址#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ //eg: //int*P=NULL;//p是整形指针-指向整型的指针-可以存放整型的地址 //char*pc=NULL;//pc是字符指针-指向字符的指针-可以存放字符的地址 //数组指针-指......
  • 指针数组
    指针数组是数组是用来存放指针的eg:指针数组用法#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ //int*parr[4];//存放整型指针的数组--指针数组 //char*pch[5];//存放字符指针的数组--指针数组 intarr1[5]={1,2,3,4,5}; intarr2[5]={2,3,4,5,6......