旋转字符串

唉,写在开头,字符串String的几个方法总是弄混淆。

String.copyValueOf(char[] data),用来返回字符串,即数组转化为字符串对象。

String.charAt(int index) ,此方法返回指定索引处的char值.

String.indexOf(int ch) ,此方法返回在此字符串中第一次出现的指定字符索引

String.valueOf(object a),根据a的类型返回该类型的参数

。。。。。

  如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A="12345",A的旋转词有"12345","23451","34512","45123"和"51234"。对于两个字符串A和B,请判断A和B是否互为旋转词。

  给定两个字符串AB及他们的长度lenalenb,请返回一个bool值,代表他们是否互为旋转词。

测试样例:

"cdab",4,"abcd",4
返回:true

  之前的想法是,两个字符串自身分别相向挪动,比如有两个字符串,abcd和cdab,然后各自分别挪动,变为bcda和bcda,然后比较两者是否相等,但是有考虑到特殊情况,比如双方只有两个字符,则分别挪动则会判断出错,因此次方法不适用。因此采用只有一个字符串挪动。接下来就是挪动的方式选择,之前想到一个字符串的第一位要移动到最后一位,想利用队列实现,可是发觉这样比较两个字符串是否相等又有问题,因此队列的方式不适用。最后就选择直接用字符串拼接的方式。代码:
 1 import java.util.*;
 2
 3 public class test {
 4     public static boolean chkRotation(String A, int lena, String B, int lenb) {
 5         // write code here
 6         int i;
 7         if(lena!=lenb){    //首先长度判断
 8             return false;
 9         }
10         else{
11             int flag=CheckSingle(A,B);    //第一次不挪位直接比较看是否相等
12             String temp = null;
13             if(flag!=1){
14                 temp=A.substring(0, lena);  //想不到好的方式把A的字符串复制给另一个字符串,就用了subsring()
15                 for(i=1;i<lena;i++){
16                     temp=temp.substring(1, lena)+temp.substring(0,1);    //字符串拼接,上一次temp字符串的后lena-1位拼接上temp的第一位,即完成了挪位
17                     if(CheckSingle(temp,B)==1){
18                         return true;
19                     }
20                 }
21                 return false;
22             }
23             else return true;
24         }
25     }
26
27     public static int CheckSingle(String A,String B){
28         if(A.equals(B)){
29             return 1;
30         }
31         else return 0;
32     }
33     public static void main(String[] args){
34         if(chkRotation("dbc",3,"bcd",3))
35             System.out.println("yes");
36         else System.out.println("no");
37     }
38 }
				
时间: 2024-09-27 04:32:06

旋转字符串的相关文章

1347 旋转字符串

1347 旋转字符串 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 S[0...n-1]是一个长度为n的字符串,定义旋转函数Left(S)=S[1-n-1]+S[0].比如S="abcd",Left(S)="bcda".一个串是对串当且仅当这个串长度为偶数,前半段和后半段一样.比如"abcabc"是对串,"aabbcc"则不是. 现在问题是给定一个字符串,判断他是否可以由一个对串旋转任意次得

左旋转字符串-剑指Offer

左旋转字符串 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”.是不是很简单?OK,搞定它! 思路 借助于字符串翻转,若要左旋转前n个字符串,就先翻转整个字符串,再分别翻转前n个和后面的字符 代码 public class Solution { public String Le

剑指offer系列源码-左旋转字符串

题目1362:左旋转字符串(Move!Move!!Move!!!) 时间限制:2 秒内存限制:32 兆特殊判题:否提交:1577解决:669 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abcXYZdef",要求输出循环左移3位后的结果,即"XYZdefabc".是不是很简单?OK,搞定它! 输入: 多组测试数据,每

经典算法面试题目-判断s2是否是s1的旋转字符串(1.8)

题目 Assume you have a method isSubstring which checks if one word is a substring of another. Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 using only one call to isSubstring ( i.e., "waterbottle" is a rotation of &qu

C语言:判断一个字符串是不是另一个字符串的旋转字符串

例如:给定s1 = AABCD和s2 = BCDAA,返回1, 给定s1=abcd和s2=ACBD,返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA AABCD右旋一个字符得到DAABC AABCD右旋两个字符得到CDAAB 分析题目之后我们发现,一个字符串有左旋转和右旋转两种.左旋转之后的字符串在原字符串拼接后的新字符串中:右旋转之后的字符串拼接之后可以找到源字符串. 这里我们会使用两个库函数strncat和strstr,关于两个函数的定义请自己查找. 字符

【剑指offer】左旋转字符串

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27366485 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abcXYZdef",要求输出循环左移3位后的结果,即"XYZdefabc".是不是很简单?OK,搞定它! 输入: 多组测试数据,每个测试数据包含一个

1289 大鱼吃小鱼 1305 Pairwise Sum and Divide 1344 走格子 1347 旋转字符串 1381 硬币游戏

1289 大鱼吃小鱼 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右.游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼.从左到右给出每条鱼的大小和游动的方向(0表示向左,1表示向右).问足够长的时间之后,能剩下多少条鱼? Input 第1行:1个数N,表示鱼的数量(1 <= N <= 100000). 第2 - N + 1行:每行两个数A[i], B[i],中间用空格分隔,分别表示鱼的大小及游动的方向(1 <= A[i] <= 10^9,B[i] = 0 或 1

【编程题目】左旋转字符串 ☆

26.左旋转字符串(字符串)题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部.如把字符串 abcdef 左旋转 2 位得到字符串 cdefab.请实现字符串左旋转的函数.要求时间对长度为 n 的字符串操作的复杂度为 O(n),辅助内存为 O(1). 思路: 设字符串为 abcdefg 要左旋两个, $$表示操作范围,|表示要旋转的轴线,将操作范围分为两个部分.每次把范围小的部分与范围大的部分的靠近|的位置交换.范围相同则直接交换. 1. $ab|cdefg$ 2    

编程算法 - 左旋转字符串 代码(C)

左旋转字符串 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部. 请定义一个函数实现字符串左旋转操作的功能. 编程珠玑, 首先翻转前部分, 再翻转后部分, 最后全部翻转. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio

【程序员编程艺术】学习记录1:左旋转字符串之指针翻转法

[程序员编程艺术]学习记录1:左旋转字符串之指针翻转法 题目:左旋转字符串 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab.请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(n) 思路一.暴力移位法 //暴力移位法 void leftshiftone(char *s, int n) { char t = s[0]; for(int i = 1;i < n; i++) s[i-1]