网易笔试的那道黑白橡皮泥反转的题有人做出来没,什么思路呢

网易笔试的那道黑白橡皮泥反转的题有人做出来没,什么思路呢#笔试题目##网易#
全部评论
package wangyi_qiuzhao; import java.util.Scanner; public class Main3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String line = scanner.nextLine(); char[] arr = line.toCharArray(); int res = 0; for (int i = 1; i < line.length(); i++) { if (arr[i-1] == arr[i]) { reverse(arr, 0, i-1); reverse(arr, i, arr.length-1); } } int sum = 1; for (int i = 1; i < arr.length; i++) { if (arr[i-1] != arr[i]) { sum += 1; // System.out.println(sum); } else { sum = 1; } if (res < sum) { res = sum; } } System.out.println(res); } public static void reverse(char[] arr, int start, int end) { while (start < end) { char temp = arr[end]; arr[end] = arr[start]; arr[start] = temp; start++; end--; } } }
点赞 回复 分享
发布于 2018-09-08 19:39
就是求s+s的最长黑白子串
点赞 回复 分享
发布于 2018-09-08 19:33
就是两个子串相加然后求最长黑白子串,但是我牛客网没用过,写完了之后死活过不去,基本凉凉
点赞 回复 分享
发布于 2018-09-12 20:38
当成一个环来做就可以。环本身不会发生变化。
点赞 回复 分享
发布于 2018-09-10 20:25
你手撕123456一下就会发现,不管你怎么翻转,结果都是按序的,差别只在于倒序还是顺序 所以结果就是s+s,统计黑白相间个数
点赞 回复 分享
发布于 2018-09-10 19:36
其他几题是什么来着 还有印象吗
点赞 回复 分享
发布于 2018-09-10 17:35
    void reverseString(string &str, int left, int right) {         int i = left;         int j = right;         while (i < j) {             swap(str[i], str[j]);             i++;             j--;         }     }     int getSubStringLen(string & str)     {         if (str.size() <= 1)             return str.size();         vector<int> v(str.size(), 0);//v[i]表示以str[i]结尾的最长黑白相间长度         v[0] = 1;         for (int i = 1; i < str.size(); i++)         {             if (str[i] != str[i - 1])//若不相等,一直向下查找                 v[i] = v[i - 1] + 1;             else             {                 if (str[i] == str[str.size() - 1] && str[i] == str[0])//当前节点与首节点和尾节点均相等则翻转后也不会改变长度                     v[i] = 1;                 else //翻转                 {                     reverseString(str, i, str.size() - 1);                     reverseString(str, 0, i - 1);                     v[i] = v[i - 1] + 1;                 }             }         }         int min = 0;         for (int i = 0; i < v.size(); i++)         {             if (v[i] > min)                 min = v[i];         }         return min;     }
点赞 回复 分享
发布于 2018-09-08 19:27
AC,检查头尾两端是否相同,如果相同,直接统计最长序列;如果不相同,在中间找到相邻同颜色的作为分割点反转,统计最长序列;
点赞 回复 分享
发布于 2018-09-08 17:56
怎么翻转都是s+s其中一个子串
点赞 回复 分享
发布于 2018-09-08 17:48
import java.util.*; public class Main {     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         String s = in.nextLine();         in.close();                  int len = s.length();         char[] ch = s.toCharArray();         ArrayList<Integer> index = new ArrayList<>();                        for(int i=0;i<len-1;i++) {             if(ch[i]==ch[i+1]) {                 index.add(i);             }         }                  if(index.size()==0) {             System.out.println(len);             return;         }         int max = index.get(0)+1;         int[] value = new int[index.size()+1];         value[0] = max;         for(int i=1;i<index.size();i++) {             int length = index.get(i)-index.get(i-1);             value[i] = length;             max = Math.max(max, length);         }         max = Math.max(max, len-1-index.get(index.size()-1));         value[index.size()] = len-1-index.get(index.size()-1);         if(ch[0]!=ch[len-1]) {             max = Math.max(value[0]+value[index.size()], max);         }         int ii = 1;         for(int i=1;i<index.size();i++) {             int length = 0;             if(ch[i]!=ch[len-1]) {                 length = value[index.size()]+value[ii];             }             ii++;             max = Math.max(max, length);              }         System.out.println(max);     } } 刚刚写了下,跑了下测试用例,都能过,但是不知道其他能不能
点赞 回复 分享
发布于 2018-09-08 17:30

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务