字符移位

来源: 牛客网 http://www.nowcoder.com/questionTerminal/7e8aa3f9873046d08899e0b44dac5e43

小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
你能帮帮小Q吗?

输入描述:

输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.

输出描述:

对于每组数据,输出移位后的字符串。

输入例子:

AkleBiCeilD

输出例子:

kleieilABCD



要求不能用额外的空间,那就只能就地移动了。遍历到一个大写字母,将其后的所有字符向前移动一步,然后将此大写字母放到末尾。重复以上过程。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s = sc.nextLine();
            char[] a = s.toCharArray();
            int n = s.length();
            int end = n;
            for (int i = 0; i < end; ++i) {
                if (a[i] >= ‘A‘ && a[i] <= ‘Z‘) {
                    char tmp = a[i];
                    for (int j = i; j < n - 1; ++j)
                        a[j] = a[j + 1];
                    a[n - 1] = tmp;
                    end--;
                    i--;
                }
            }
            for (int k = 0; k < n; ++k)
                System.out.print(a[k]);
            System.out.println();
        }
    }
}

时间: 2024-08-03 13:55:31

字符移位的相关文章

腾讯2017暑期实习生编程题 第二题 字符移位

小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间. 你能帮帮小Q吗? 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出移位后的字符串. 输入例子1: AkleBiCeilD 输出例子1: kleieilABCD import java.util.ArrayList; import java.util.LinkedList; import java.util.

[面试编程题]算法基础-字符移位

错误代码 #include<iostream> #include<string> using namespace std; bool isLow(char c) { if( (c>='A') && (c<='Z')) return false; else return true; } bool isCap(char c) { return !isLow(c); } int main() { string s; while(cin>>s) {

腾讯2017暑期实习生编程题

1.构造回文 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢? 输出需要删除的字符个数. 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少需要删除的字符个数. 输入例子: abcda google 输出例子: 2 2 代码如下: #include <iostream> #include <string.h> #include

散列表(Hash table)及其构造

散列表(Hash table) 散列表,是根据关键码值(Key value)而直接进行访问的数据结构.它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表. 已知的查找方法: 1.顺序查找 O(N) 2.二分查找(静态查找) O(log2N) 3.二叉搜索树 O(h) h为二叉树的高度 平衡二叉树 O(log2N) Q:如何快速搜索到需要的关键字?如果关键字不方便比较怎么办? 查找的本质:已知对象找位置 有序安排对象:全序.半序 直接

查找之散列查找(哈希表)

本学习笔记部分内容来自网易云课堂浙江大学数据结构课程,谢谢! 1.散列表(哈希表) 已知的几种查找方法: 顺序查找  O(N) 二分查找(静态查找)  O(logN) 二叉搜索树      O(h)  h为二叉树高度   (动态查找:有插入有删除有查找) 平衡二叉树      O(logN) 查找的本质:已知对象找位置 1.有序安排对象:全序或半序: 2.直接算出对象位置:散列. 散列查找法的两项基本工作: 1.计算位置:构造散列函数确定关键词存储位置: 2.解决冲突:应用某种策略解决多个关键词

散列查找

编译处理时,涉及变量及属性的管理 :插入(新变量的定义),查找(变量的引用). 顺序查找  O(N)    二分查找 O(logN)    二叉树查找O(H)     平衡二叉树 O(logN) 如何快速查找? 查找的本质:已知对象找位置 有序的安排对象-> 全序:顺序查找  半序:二叉树 直接算出位置-> 散列查找 散列查找:1.计算位置.2.解决冲突. 1计算位置 构造散列函数.  要求:计算简单:地址分布均匀. 数字关键词:1 直接定值.2 除留余数 h(key)= key mod p,

数据结构学习笔记07散列查找

1.散列表(Hash) 查找的本质: 已知对象找位置. 有序安排对象:全序.半序 直接“算出”对象位置:散列 时间复杂度几乎是常量:O(1),即查找时间与问题规模无关 散列查找法的两项基本工作: 计算位置:构造散列函数确定关键词存储位置: 解决冲突:应用某种策略解决多个关键词位置相同的问题 散列(Hashing) 的基本思想是: ①以关键字key为自变量,通过一个确定的函数 h(散列函数),计算出对应的函数值h(key),作为数据对象的存储地址. ②可能不同的关键字会映射到同一个散列地址上,即h

2. C语言文件操作经典习题

1. 统计英文文本文件中,有多少个大写字母.小写字母.数字.空格.换行以及其他字符. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void main() { char path[100] = "c:\\统计.txt"; FILE *fp; //创建文件指针 fp = fopen(path, "r"); //打开文件,按照读的模式 if (fp =

采用字符的移位方式实现字符文本加密解密。

Scanner sc=new Scanner(System.in); System.out.println("需要解密的内容是"); String str=sc.nextLine();//输入解密前的内容 System.out.print("您的内容解密之后是:"+str.replaceAll("A", "c").replaceAll("B", "d").replaceAll("