首页 > 试题广场 >

字符串的调整I

[编程题]字符串的调整I
  • 热度指数:1917 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个字符串chas[],其中只含有字母字符和“*”字符,现在想把所有“*”全部挪到chas的左边,字母字符移到chas的右边。完成调整函数。

输入描述:
输入一行字符串代表chas


输出描述:
输出一行,代表返回的字符串。
示例1

输入

qw**23

输出

**qw23
示例2

输入

o*f*f*e*r

输出

****offer

备注:
时间复杂度,额外空间复杂度
#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s,res="",t="";
    cin>>s;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]=='*')
            res+=s[i];
        else
            t+=s[i];
    }
    cout<<res<<t<<endl;
    return 0;
}

发表于 2019-09-17 20:58:38 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main(){
    string s, s1, s2;
    cin>>s;
    for(auto &c: s){
        if(c=='*')
            s1 += c;
        else
            s2 += c;
    }
    cout<<s1+s2<<endl;
    return 0;
}

发表于 2020-04-30 00:49:11 回复(0)
怎么达到O(1)的空间复杂度,重新造一个字符串只能O(n)啊
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] str = br.readLine().trim().toCharArray();
        StringBuilder star = new StringBuilder();
        StringBuilder alpha = new StringBuilder();
        for(int i = 0; i < str.length; i++){
            if(str[i] == '*')
                star.append(str[i]);
            else
                alpha.append(str[i]);
        }
        System.out.println(star.toString() + alpha.toString());
    }
}

发表于 2021-07-02 12:24:57 回复(0)
#include <iostream>
#include <string>

void swap(std::string& s , int i, int j)
{
    char temp = s[i];
    s[i] = s[j];
    s[j] = temp;
}

int main()
{
    std::string s;
    std::cin >> s;
    

    bool last_char = true;
    int pos = s.size()-1;;
    for(int i = s.size()-1; i>= 0; --i)
    {
        if(s[i] != '*')
        {
            if(last_char)
            {
                swap(s, i, pos);
                last_char = false;
            }
            else
            {
                if(i != pos-1)
                {
                     swap(s, i, pos-1);
                }
                pos -= 1;
                
            }
        }
    }
    std::cout << s << "\n";
    return 0;
}


发表于 2021-03-27 15:16:13 回复(0)
import java.io.*;
public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
        char[] chas=bf.readLine().toCharArray();
        int j=chas.length-1;
        for(int i=chas.length-1;i>-1;i--){
            if(chas[i]!='*'){
                chas[j--]=chas[i];
            }
        }
        for(;j>-1;){
            chas[j--]='*';
        }
        System.out.println(new String(chas));
        
    }

}

发表于 2020-02-14 09:23:20 回复(0)
#include <stdio.h>
#include <string.h>

#define MAXLEN 100001

int main(void) {
    int len, i, j;
    char str[MAXLEN];
    scanf("%s", str);
    len = strlen(str);
    
    for (i = len - 1, j = len - 1; i >= 0; i--) {
        if (str[i] != '*') {
            str[j--] = str[i];
        }
    }
    while (j >= 0) {
        str[j--] = '*';
    }

    printf("%s\n", str);
    return 0;
}

发表于 2022-02-06 19:06:09 回复(0)
s=input()
#统计s中*的个数
num=s.count('*')
print(('*'*num)+s.replace('*', ''))

作弊玩法
发表于 2021-06-15 08:30:52 回复(0)
import java.util.*;
 
public class Main{
     
    public String change(String s) {
        char[] arr = s.toCharArray();
        StringBuilder s1 = new StringBuilder();
        StringBuilder s2 = new StringBuilder();
        for(char c :arr) {
            if(c == '*') {
                s1.append('c');
            }else{
                s2.append('c');
            }
        }
        s1.append(s2);
        return s1.toString();
   }   
}
想问这个为什么通过不了,问题在那里
 
发表于 2020-07-28 20:29:06 回复(1)
import java.util.Scanner;

/**
 * @author yanglaiyi
 * @title: 字符串的调整
 * @projectName 我自己的算法学习
 * @description: TODO
 * @date 2020/4/1315:03
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String replace = s.replace("*", "");
        String s1 = s.replaceAll("\\d|\\w", "");
        System.out.println(s1+replace);



    }

}


发表于 2020-04-13 15:15:10 回复(1)
// 注意: 对于字符串来说,存在n个字符*,那么使用split('*)就必定会切割为长度=n+1的数组
// 切割后的数组可能存在多个''的元素,这是正常的
var arr=readline().split('*');
var left=new Array(arr.length).join('*');
var right=arr.join('');
console.log(left+right)

发表于 2020-04-01 23:48:53 回复(0)

#include<stdio.h>
(737)#include<string.h>
int main()
{
   char a[100000];
    char b[100000];
    char c[100000];
    int l,num,mum;
    while(scanf("%s",a)!=EOF){
         l=strlen(a);
        num=mum=0;
        for (int i=0;i<l;i++){
            if (a[i]=='*'){
                b[num]=a[i];
                num++;
                
            }
            if(a[i]!='*'){
                c[mum]=a[i];
                mum++;
            }
            
        }
        
        printf("%s",b);
         printf("%s",c);
    }
    return 0;
}

发表于 2020-03-31 16:18:09 回复(0)
#include<cstdio>
#include<cstring>
int main(){
    char str[100010];
    while(scanf("%s",str)!=EOF){
        int len=strlen(str);
        int k=len-1;
        for(int i=len-1;i>=0;--i){
            if(str[i]!='*'){
                str[k--]=str[i];
            }
        }
        for(k;k>=0;--k){
            str[k]='*';
        }
        printf("%s",str);
    }
    return 0;
}

编辑于 2020-03-25 17:57:56 回复(0)

问题信息

上传者:小小
难度:
12条回答 4864浏览

热门推荐

通过挑战的用户

查看代码