码迷,mamicode.com
首页 > 其他好文 > 详细

【hihocoder】字符消除

时间:2019-04-05 23:52:42      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:insert   min   相同   while   turn   class   char   关系   pack   

 

 

 

 

 

package Lv1;

import java.util.*;


public class 字符消除 {

    // f(s):返回消除s连续相同字符的个数
    private static int f(String s) {
        int ans = 0;

        StringBuffer sb = new StringBuffer(s);
        while (!different(sb.toString())) {//这个循环是如果还有连续的重复子串 那就接着消除
            for (int i = sb.length() - 1; i > 0; i--) {//这里需要倒着消除  和序号有关系  这里利用了可变数组的消除
                if (sb.charAt(i) == sb.charAt(i - 1)) {// 出现了重复子串
                    int j = i - 1;
                    
                    while (j > 0 && sb.charAt(j) == sb.charAt(i))//一旦i出现了重复子串 那么就是使用j去遍历全部的连续的字符
                        j--;
                    //所有分开了两个情况讨论
                    if (j == 0 && sb.charAt(0) == sb.charAt(i)) {// 直接去到0的话   这里有一个边界的问题  
                        sb = sb.delete(j, i + 1);
                        ans += (i + 1) - j;
                        break;
                    }
                    sb = sb.delete(j + 1, i + 1);
                    ans += (i + 1) - (j + 1);
                    i = j + 1;// 之后还有i--

                }
            }
        }

        return ans;
    }

    // different(s): 判断是否有连着的相同的
    private static boolean different(String s) {
        // 因为只有ABC 所以只要判断AA BB CC 这样的子串是否存在
        // 如果存在返回false
        if (s.contains("AA"))
            return false;
        if (s.contains("BB"))
            return false;
        if (s.contains("CC"))
            return false;

        return true;
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=Integer.parseInt(sc.nextLine().trim());
        String[] ss=new String[n];
        for(int i=0;i<n;i++){
            ss[i]=sc.nextLine().trim();
        }
        
        for(int i=0;i<n;i++){
            
            int max=Integer.MIN_VALUE;
            for(int j=0;j<=ss[i].length();j++){//各个位置插入
                for(char k=‘A‘;k<=‘C‘;k++){
                    StringBuffer sb=new StringBuffer(ss[i]);
                    sb=sb.insert(j, k);
                    int t=f(sb.toString());
                    max=Math.max(max, t);
                    
                }
                    
            }
            
            System.out.println(max);
        }
        
        
    }
}

 

【hihocoder】字符消除

标签:insert   min   相同   while   turn   class   char   关系   pack   

原文地址:https://www.cnblogs.com/Rowry/p/10660306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!