有几个PATjava答案

一开始我觉得很简单,连续用了三层遍历,找到P后,再找A,再找T,这样很容易就超时了

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
  public static void main(String[] args) throws NumberFormatException, IOException{	  
	  BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	  String str=br.readLine();
	  long count=0;//PAT的数量
	  for(int i=0;i<str.length();i++) {
		  if(str.charAt(i)=='P') {
			  for(int j=i;j<str.length();j++) {
				  if(str.charAt(j)=='A') {
					  for(int m=j;m<str.length();m++) {
						  if(str.charAt(m)=='T') {
							  count++;
						  }
					  }
				  }
			  }
		  }
	  }
	  System.out.print(count%1000000007);
  }
}

下面介绍一种做法,先获取到字符串中所有T的数量,再对字符串逐个遍历,遍历到P,P的数量加1,遍历到T那么就把T的数量减1,因为这个T和P还没有A,如果遍历到A,就给total加上P的数量*T的数量


import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        char[] s = in.readLine().toCharArray();
        in.close();
        int len = s.length, countp = 0, countt = 0;
        long total = 0;
        for (int i = 0; i < len; i++) {
            if (s[i] == 'T')
                countt++;
        }
        for (int i = 0; i < len; i++) {
            if (s[i] == 'P')
                countp++;
            if (s[i] == 'T')
                countt--;
            if (s[i] == 'A') {
                total = total + countp * countt;
                if (total > 1000000007)
                    total = total % 1000000007;
            }
        }
        System.out.println(total);
    }
}

全部评论

相关推荐

05-22 09:23
门头沟学院 Java
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
昨天 18:45
已编辑
中山职业技术学院 Java
投递TP-LINK等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务