栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

环状序列java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

环状序列java

问题描述

长度为n的环状串有n种表示法,分别为某个位置开始顺时针得到。CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中,字典序最小的称为“最小表示”。输入一个长度为n(n<=100)的环状DNA串(只包含A、C、G、T这4种字符)的一种表示法,你的任务是输出该环状串的最小表示。例如:
CTCC的最小表示是CCCT
CGAGTCAGCT的最小表示为AGCTCGAGTC。

样例输入:

2
CGAGTCAGCT
CTCC

样例输出:

AGCTCGAGTC
CCCT

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int T=sc.nextInt();//测试的次数
		while(T-->0) {
			String s=sc.next();
			int ans=0;//最小串在输入串中的起始位置
			char[] arr=s.toCharArray();//输入串转为字符数组
			for (int i = 1; i < arr.length; i++) {//直接从i=1开始(即第二个字母),因为ans初始值为0,不用比较
				if(less(arr,i,ans)) {//如果i位置所对应字典序更小,则赋值给ans
					ans=i;
				}
			}
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[(ans+i)%arr.length]);
			}
		}
	}

	private static boolean less(char[] arr, int p, int q) {
		for (int i = 0; i < arr.length; i++) {//从p,q的0号位置开始比较,当比较到不相等时,如果p对应的更小,则返回true
			if(arr[(p+i)%arr.length]!=arr[(q+i)%arr.length])
				return arr[(p+i)%arr.length]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293400.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号